Saltar al contenido

SQL – ¿Diferencia entre COALESCE e ISNULL?

Solución:

Comparando COALESCE e ISNULL

La función ISNULL y la expresión COALESCE tienen un propósito similar pero pueden comportarse de manera diferente.

  1. Como ISNULL es una función, se evalúa solo una vez. Como se describió anteriormente, los valores de entrada para la expresión COALESCE se pueden evaluar varias veces.
  2. La determinación del tipo de datos de la expresión resultante es diferente. ISNULL usa el tipo de datos del primer parámetro, COALESCE sigue las reglas de expresión CASE y devuelve el tipo de datos de valor con la mayor prioridad.
  3. La NULLability de la expresión de resultado es diferente para ISNULL y COALESCE. El valor de retorno ISNULL siempre se considera NO NULL (asumiendo que el valor de retorno no es nulo) mientras que COALESCE con parámetros no nulos se considera NULL. Entonces, las expresiones ISNULL (NULL, 1) y COALESCE (NULL, 1) aunque equivalentes tienen diferentes valores de nulabilidad. Esto marca la diferencia si está utilizando estas expresiones en columnas calculadas, creando restricciones de clave o haciendo que el valor de retorno de una UDF escalar sea determinista para que pueda indexarse ​​como se muestra en el siguiente ejemplo.
> USE tempdb; 
> GO

> -- This statement fails because the PRIMARY KEY cannot accept NULL values
> -- and the nullability of the COALESCE expression for col2 
> -- evaluates to NULL. 

> CREATE TABLE #Demo  (  col1 integer NULL,  col2 AS COALESCE(col1, 0) PRIMARY KEY,  col3 AS ISNULL(col1, 0)  ); 
> 
> -- This statement succeeds because the nullability of the 
> -- ISNULL function evaluates AS NOT NULL.
> 
> CREATE TABLE #Demo  (  col1 integer NULL,  col2 AS COALESCE(col1, 0), 
> col3 AS ISNULL(col1, 0) PRIMARY KEY  );

Las validaciones para ISNULL y COALESCE también son diferentes. Por ejemplo, un valor NULL para ISNULL se convierte a int, mientras que para COALESCE, debe proporcionar un tipo de datos. ISNULL toma solo 2 parámetros mientras que COALESCE toma un número variable de parámetros.

Fuente: BOL

La principal diferencia es que COALESCE es ANSI-Standard, por lo que también lo encontrará en otros RDBMS, la otra diferencia es que puede proporcionar una lista completa de valores para verificar COALESCE mientras que para ISNULL solo puedes pasar uno.

Porque ISNULL es una función, se evalúa solo una vez. Como se describió anteriormente, los valores de entrada para el COALESCE La expresión se puede evaluar varias veces.
COALESCE básicamente se traduce en CASE expresión y ISNULL es un incorporado implementado en el motor de la base de datos.

MSDN

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *