En el mundo de las bases de datos, especialmente dentro del ecosistema de Microsoft SQL Server y sus variantes en la nube como Azure SQL Database y Azure SQL Managed Instance, el concepto de nivel de compatibilidad juega un rol fundamental. Este ajuste define el comportamiento de una base de datos, permitiendo que se comporte como si estuviera ejecutándose en una versión anterior del motor de base de datos. Comprender y gestionar este nivel es vital tanto para la migración, la actualización como para garantizar el rendimiento y la estabilidad de tus aplicaciones.

El nivel de compatibilidad de una base de datos influye en una amplia gama de comportamientos, incluyendo la optimización de consultas, las características del lenguaje Transact-SQL (T-SQL), las funciones del sistema, los tipos de datos y la forma en que se manejan los errores. Al mantener un nivel de compatibilidad más bajo, una base de datos puede seguir utilizando las reglas y el comportamiento de una versión anterior, lo que es útil durante las actualizaciones del servidor para minimizar el impacto en las aplicaciones existentes. Sin embargo, para aprovechar las últimas mejoras de rendimiento, las nuevas características de T-SQL y las optimizaciones del motor, es necesario actualizar el nivel de compatibilidad.
- ¿Qué es Exactamente el Nivel de Compatibilidad?
- ¿Por Qué es Importante el Nivel de Compatibilidad?
- Visualizando el Nivel de Compatibilidad Actual
- Cambiando el Nivel de Compatibilidad
- Consideraciones Antes de Cambiar el Nivel
- Preguntas Frecuentes (FAQ)
- ¿Cuál es el nivel de compatibilidad recomendado?
- ¿Qué sucede si no actualizo el nivel de compatibilidad después de actualizar el servidor?
- ¿Puede un nivel de compatibilidad más bajo mejorar el rendimiento?
- ¿Es reversible un cambio de nivel de compatibilidad?
- ¿El nivel de compatibilidad afecta la sintaxis de T-SQL?
- Conclusión
¿Qué es Exactamente el Nivel de Compatibilidad?
Piensa en el nivel de compatibilidad como un "modo de operación" para tu base de datos. Cada versión principal de SQL Server introduce nuevas características, mejoras en el optimizador de consultas y, a veces, cambios en el comportamiento de ciertas funciones o sintaxis de T-SQL. Para permitir que los usuarios actualicen su motor de base de datos (por ejemplo, de SQL Server 2017 a SQL Server 2019) sin que sus aplicaciones dejen de funcionar de inmediato debido a estos cambios, Microsoft introdujo el concepto de nivel de compatibilidad.
Una base de datos configurada con un nivel de compatibilidad de, por ejemplo, 140 (correspondiente a SQL Server 2017) en un servidor SQL Server 2019 (cuyo nivel predeterminado es 150) se comportará en gran medida como lo haría en SQL Server 2017. Utilizará el optimizador de consultas de esa versión, respetará su sintaxis y reglas, y no expondrá ciertas características o comportamientos de la versión más reciente (SQL Server 2019).
Los niveles de compatibilidad están vinculados a versiones específicas del motor de base de datos. Algunos de los niveles comunes incluyen:
- 160: SQL Server 2022
- 150: SQL Server 2019
- 140: SQL Server 2017
- 130: SQL Server 2016
- 120: SQL Server 2014
- 110: SQL Server 2012
- 100: SQL Server 2008 / 2008 R2
- 90: SQL Server 2005
Es importante destacar que, aunque un servidor puede soportar varios niveles de compatibilidad anteriores, solo puede crear nuevas bases de datos con el nivel de compatibilidad predeterminado de esa versión del servidor (o uno inferior soportado). Además, no todos los cambios de una nueva versión están controlados por el nivel de compatibilidad; algunos cambios son a nivel de instancia o globales y afectarán a todas las bases de datos, independientemente de su nivel.
¿Por Qué es Importante el Nivel de Compatibilidad?
La importancia del nivel de compatibilidad radica en varios aspectos:
- Migración y Actualización: Permite realizar una actualización del motor de base de datos con un riesgo menor para las aplicaciones existentes. Puedes actualizar el servidor y mantener las bases de datos con un nivel de compatibilidad anterior, probar tu aplicación en el nuevo entorno y luego, gradualmente, actualizar el nivel de compatibilidad de la base de datos para aprovechar las nuevas características.
- Rendimiento: Las versiones más recientes del motor de base de datos a menudo incluyen mejoras significativas en el optimizador de consultas. Al actualizar el nivel de compatibilidad, la base de datos comienza a utilizar el nuevo optimizador, lo que potencialmente puede mejorar el rendimiento de tus consultas. Sin embargo, también existe el riesgo de que algunos planes de ejecución cambien de manera desfavorable, lo que requiere pruebas rigurosas.
- Acceso a Nuevas Características: Algunas funciones y sintaxis de T-SQL solo están disponibles cuando la base de datos se establece en un nivel de compatibilidad igual o superior al nivel en el que se introdujo esa característica.
- Comportamiento Consistente: Asegura que el comportamiento de ciertas operaciones o funciones sea predecible y consistente con la versión del motor para la que fue diseñada originalmente la aplicación.
Cambiar el nivel de compatibilidad es una operación relativamente sencilla desde el punto de vista técnico, pero sus efectos en la aplicación pueden ser significativos y a veces inesperados. Por ello, siempre se recomienda realizar pruebas exhaustivas en un entorno de no producción antes de aplicar un cambio de nivel de compatibilidad en producción.
Visualizando el Nivel de Compatibilidad Actual
Saber cuál es el nivel de compatibilidad de una base de datos existente es el primer paso antes de considerar cualquier cambio. Hay dos métodos principales para hacerlo: utilizando SQL Server Management Studio (SSMS) o mediante Transact-SQL.
Usando SQL Server Management Studio (SSMS)
SSMS proporciona una interfaz gráfica e intuitiva para administrar tus bases de datos. Sigue estos pasos:
- Conéctate a la instancia de SQL Server, Azure SQL Database o Azure SQL Managed Instance que aloja la base de datos de interés.
- En el Explorador de objetos, expande el nodo "Bases de datos".
- Localiza la base de datos específica (ya sea una base de datos de usuario o, en SQL Server on-premises/Managed Instance, una base de datos del sistema como
masteromsdb; aunque el nivel de bases de datos del sistema no se puede modificar en Azure SQL Database). - Haz clic derecho sobre el nombre de la base de datos y selecciona "Propiedades". Esto abrirá el cuadro de diálogo de propiedades de la base de datos.
- En el panel de la izquierda, selecciona la página "Opciones".
- Busca la sección "Otros parámetros" o similar. Allí encontrarás un campo etiquetado como "Nivel de compatibilidad".
- El valor mostrado en el cuadro desplegable es el nivel de compatibilidad actual de la base de datos.
Este método es sencillo y visualmente útil, especialmente si no estás familiarizado con T-SQL.
Usando Transact-SQL
Para quienes prefieren scripts o necesitan verificar el nivel de compatibilidad de varias bases de datos, T-SQL es la herramienta ideal. Puedes ejecutar consultas utilizando SSMS, Azure Data Studio o cualquier otra herramienta que permita ejecutar T-SQL.
Para ver el nivel de compatibilidad de una base de datos específica, puedes consultar la vista de catálogo sys.databases. Esta vista contiene metadatos sobre todas las bases de datos en la instancia.
Abre una nueva ventana de consulta y ejecuta el siguiente script. Asegúrate de reemplazar 'NombreTuBaseDeDatos' con el nombre real de la base de datos que deseas consultar.
USE NombreTuBaseDeDatos; -- Opcional, pero buena práctica
GO
SELECT name, compatibility_level
FROM sys.databases
WHERE name = 'NombreTuBaseDeDatos';
GOSi omites la cláusula WHERE, la consulta te mostrará el nombre y el nivel de compatibilidad de todas las bases de datos en la instancia.
SELECT name, compatibility_level
FROM sys.databases;
GOEste método es rápido y eficiente, especialmente para automatizar tareas o verificar múltiples bases de datos.

Cambiando el Nivel de Compatibilidad
Modificar el nivel de compatibilidad de una base de datos requiere el permiso ALTER sobre esa base de datos. Una vez que tienes los permisos necesarios y, crucialmente, has realizado las pruebas pertinentes, puedes proceder al cambio.
Usando SQL Server Management Studio (SSMS)
El proceso es similar a la visualización:
- Conéctate a la instancia y localiza la base de datos en el Explorador de objetos.
- Haz clic derecho sobre la base de datos y selecciona "Propiedades".
- Ve a la página "Opciones".
- En el cuadro desplegable "Nivel de compatibilidad", selecciona el nuevo nivel deseado de la lista de opciones disponibles. Las opciones mostradas dependerán de la versión del motor de base de datos al que estés conectado.
- Haz clic en "Aceptar" para aplicar el cambio.
SSMS ejecutará el comando T-SQL subyacente para realizar el cambio.
Usando Transact-SQL
El comando T-SQL para cambiar el nivel de compatibilidad es ALTER DATABASE. Este es el método más común y recomendado para scripts y automatización.
Abre una nueva ventana de consulta y ejecuta el siguiente script. Reemplaza 'NombreTuBaseDeDatos' con el nombre de tu base de datos y 'NuevoNivel' con el valor numérico del nivel de compatibilidad deseado (por ejemplo, 160 para SQL Server 2022).
ALTER DATABASE NombreTuBaseDeDatos
SET COMPATIBILITY_LEVEL = NuevoNivel;
GOPor ejemplo, para cambiar el nivel de compatibilidad de la base de datos 'AdventureWorks2022' a 160 (SQL Server 2022), el comando sería:
ALTER DATABASE AdventureWorks2022
SET COMPATIBILITY_LEVEL = 160;
GOEste comando se ejecuta casi instantáneamente y el cambio surte efecto inmediatamente para las nuevas conexiones a la base de datos. Las conexiones existentes pueden necesitar ser restablecidas para ver el nuevo comportamiento, dependiendo de la naturaleza exacta de los cambios introducidos por el nuevo nivel.
Consideraciones Antes de Cambiar el Nivel
Cambiar el nivel de compatibilidad no es una operación que deba tomarse a la ligera, especialmente en entornos de producción. Antes de ejecutar ALTER DATABASE SET COMPATIBILITY_LEVEL, es crucial:
- Entender el Impacto: Revisa la documentación oficial de Microsoft para la versión de SQL Server a la que estás actualizando y el nuevo nivel de compatibilidad. Familiarízate con los cambios de comportamiento, las características obsoletas o eliminadas y las mejoras en el optimizador de consultas.
- Probar a Fondo: Este es el paso más importante. Restaura una copia de seguridad de tu base de datos en un entorno de pruebas que ejecute la misma versión del motor de base de datos que tu entorno de producción objetivo. Cambia el nivel de compatibilidad en este entorno de pruebas. Ejecuta pruebas de regresión completas para tu aplicación. Presta especial atención al rendimiento de las consultas (compara los planes de ejecución) y verifica que no haya errores inesperados debido a cambios en la sintaxis o el comportamiento.
- Considerar el Optimizador de Consultas: Uno de los impactos más significativos suele ser el cambio en el optimizador de consultas. El nuevo optimizador podría generar planes de ejecución diferentes, algunos mejores, otros peores. La base de datos de pruebas es esencial para identificar posibles regresiones de rendimiento. Herramientas como Query Store (Almacén de Consultas) pueden ser invaluable para identificar y mitigar problemas de rendimiento después de un cambio de nivel.
- Planificar la Reversión: Ten un plan claro sobre cómo revertir el cambio si surgen problemas inesperados en producción. Esto generalmente implica restaurar una copia de seguridad de la base de datos con el nivel de compatibilidad anterior.
No se puede cambiar el nivel de compatibilidad de una base de datos de Azure SQL de Microsoft Fabric; estas bases de datos siempre utilizan la versión más reciente del motor y, por lo tanto, el nivel de compatibilidad más alto disponible.
Preguntas Frecuentes (FAQ)
Aquí respondemos algunas preguntas comunes sobre el nivel de compatibilidad de bases de datos:
¿Cuál es el nivel de compatibilidad recomendado?
Generalmente, se recomienda usar el nivel de compatibilidad más reciente soportado por tu versión del motor de base de datos, después de haber realizado pruebas exhaustivas. Esto te permite aprovechar las últimas características y mejoras de rendimiento. Sin embargo, si la compatibilidad con una aplicación heredada es crítica y las pruebas revelan problemas, podrías necesitar mantener un nivel anterior temporalmente.
¿Qué sucede si no actualizo el nivel de compatibilidad después de actualizar el servidor?
Tu base de datos seguirá funcionando con el comportamiento definido por su nivel de compatibilidad actual. La aplicación probablemente seguirá funcionando sin cambios inmediatos. Sin embargo, no podrás beneficiarte de las mejoras de rendimiento o las nuevas características introducidas en los niveles superiores. Además, mantener un nivel de compatibilidad muy antiguo puede limitar el soporte o la capacidad de usar ciertas herramientas o servicios.
¿Puede un nivel de compatibilidad más bajo mejorar el rendimiento?
En casos raros, un plan de ejecución de consulta generado por un optimizador más antiguo (correspondiente a un nivel de compatibilidad más bajo) podría ser mejor que el generado por el optimizador más nuevo para una consulta específica. Sin embargo, en la mayoría de los casos, las mejoras en los optimizadores más recientes tienden a ofrecer un mejor rendimiento general. Si encuentras una regresión de rendimiento después de actualizar el nivel, puedes intentar forzar el uso del plan de ejecución anterior para esa consulta particular utilizando herramientas como Query Store.
¿Es reversible un cambio de nivel de compatibilidad?
Sí, puedes cambiar el nivel de compatibilidad a un nivel inferior soportado por tu versión del motor de base de datos utilizando el mismo comando ALTER DATABASE SET COMPATIBILITY_LEVEL con el valor numérico del nivel deseado. Sin embargo, esto no revierte automáticamente ningún cambio que hayas hecho en la base de datos o en la aplicación basándote en características del nivel superior.
¿El nivel de compatibilidad afecta la sintaxis de T-SQL?
Sí, el nivel de compatibilidad puede afectar qué sintaxis de T-SQL es válida y cómo se comporta. Algunas funciones pueden volverse obsoletas, y otras nuevas pueden introducirse. Por ejemplo, ciertas características del optimizador de consultas o funciones de ventana pueden depender de un nivel de compatibilidad específico.
Conclusión
El nivel de compatibilidad es un ajuste poderoso que te permite controlar el comportamiento de tus bases de datos dentro de un motor SQL Server más reciente. Es una herramienta esencial para gestionar transiciones durante actualizaciones y migraciones, permitiendo un enfoque gradual para adoptar nuevas versiones. Si bien verificar el nivel actual es sencillo, cambiarlo requiere una planificación cuidadosa y pruebas exhaustivas para asegurar que tus aplicaciones sigan funcionando correctamente y se beneficien, en lugar de verse perjudicadas, por las mejoras del motor de base de datos subyacente. Dominar este concepto es clave para mantener tus sistemas de bases de datos actualizados, seguros y con un rendimiento óptimo.
Si quieres conocer otros artículos parecidos a Nivel de Compatibilidad de Bases de Datos puedes visitar la categoría Bases de datos.

Aprende mas sobre MySQL