MS SQL Isnull vs COALESCE

T-SQL incorposa la sentencia COALESCE es similar a ISNULL, pero con algunas ventajas, tal vez la mas importante es que se le puede dar mas de un argumento:
Si intenta evaluar más de dos entradas, se necesita anidar llamadas ISNULL, mientras que COALESCE puede manejar cualquier número. 
El límite superior no está documentado explícitamente, pero el punto es que, para todos los efectos, COALESCE manejará mejor sus necesidades en este caso. Ejemplo:

*SELECT COALESCE(a, b, c, d, e, f, g) FROM dbo.table;*

para hacer esto con ISNULL, se necesita:

*SELECT ISNULL(a, ISNULL(b, ISNULL(c, ISNULL(d, ISNULL(e, ISNULL(f, g)))))) FROM dbo.table;*

Las dos consultas producen planes absolutamente idénticos; de hecho, el resultado se extrapola exactamente a la misma expresión para ambas consultas:

CASE         WHEN [tempdb].[dbo].[table].[a] IS NOT NULL THEN [tempdb].[dbo].[table].[a] 
   ELSE CASE WHEN [tempdb].[dbo].[table].[b] IS NOT NULL THEN [tempdb].[dbo].[table].[b] 
   ELSE CASE WHEN [tempdb].[dbo].[table].[c] IS NOT NULL THEN [tempdb].[dbo].[table].[c] 
   ELSE CASE WHEN [tempdb].[dbo].[table].[d] IS NOT NULL THEN [tempdb].[dbo].[table].[d] 
   ELSE CASE WHEN [tempdb].[dbo].[table].[e] IS NOT NULL THEN [tempdb].[dbo].[table].[e] 
   ELSE CASE WHEN [tempdb].[dbo].[table].[f] IS NOT NULL THEN [tempdb].[dbo].[table].[f] 
   ELSE [tempdb].[dbo].[table].[g] END END END END END END
   
Entonces, el punto principal aquí es que el rendimiento será idéntico en este caso y que el T-SQL en sí es el problema, se vuelve innecesariamente complicado. Y estos son nombres de columnas muy simples, de una sola letra, así que imagine cuánto más larga se vería esa segunda consulta si estuviera tratando con nombres de columnas mas reales.


Referencias

Comentarios

Entradas populares de este blog

¿Qué es la JCAHO Joint Commission on Accreditation of Healthcare Organizations?

PARSEO DEL CODIGO PDF417 DEL DNI ARGENTINO

¿Como instalar El Cliente de SOPHOS VPN ?