ISNULL y para qué se usa?
ISNULL es una función que evalúa una expresión y, si esta es NULL, devuelve el valor especificado como reemplazo. Si la expresión no es NULL, devuelve el valor original. De esta forma, se asegura que no se devuelvan valores nulos en la salida de consultas, lo cual es útil para presentar datos limpios y completos.
Se usa en escenarios como:
NULL con mensajes personalizados o valores predeterminados.
ISNULL
ISNULL ( expression, replacement_value )
expression: La expresión que se desea evaluar (por ejemplo, una columna de una tabla).
replacement_value: El valor que se devuelve si expression es NULL. Debe ser del mismo tipo de datos que expression o convertible a este tipo.
ISNULL
NULL con un valor predeterminado
Supongamos que tienes una tabla Empleados con la columna Correo y algunos empleados no tienen correo registrado (NULL). Para mostrar el texto 'No especificado' en lugar de NULL:
SELECT Nombre, ISNULL(Correo, 'No especificado') AS Correo
FROM Empleados;
Resultado:
Nombre | Correo
-----------|------------------
Ana | ana@gmail.com
Luis | No especificado
Juan | juan@mail.com
La función ISNULL reemplaza NULL en la columna Correo con el texto 'No especificado'.
ISNULL en cálculos
Si tienes una tabla Ventas con la columna Descuento, y algunos registros tienen NULL en Descuento, puedes reemplazar NULL con 0 para asegurar que no afecte los cálculos:
SELECT Producto, Precio, ISNULL(Descuento, 0) AS Descuento,
Precio - ISNULL(Descuento, 0) AS PrecioFinal
FROM Ventas;
Resultado:
Producto | Precio | Descuento | PrecioFinal
-----------|--------|-----------|-------------
Laptop | 1000 | 100 | 900
Tablet | 500 | 0 | 500
Smartphone | 800 | 50 | 750
En este ejemplo, ISNULL convierte NULL en Descuento a 0, asegurando que el cálculo de Precio - Descuento no falle.
ISNULL
Cuando se concatenan cadenas de texto, un valor NULL puede provocar que toda la cadena resultante también sea NULL. Puedes evitar esto usando ISNULL:
SELECT ISNULL(Nombre, 'Desconocido') + ' ' + ISNULL(Apellido, '') AS NombreCompleto
FROM Empleados;
Resultado:
NombreCompleto
-------------------
Ana García
Luis López
Desconocido Martínez
Esto garantiza que las partes nulas de Nombre o Apellido no afecten la cadena completa.
NULL en funciones de agregación
Si usas funciones de agregación como SUM o AVG, y algunas filas tienen valores nulos, puedes usar ISNULL para reemplazarlos:
SELECT SUM(ISNULL(Salario, 0)) AS TotalSalarios
FROM Empleados;
Esto asegura que las filas con Salario igual a NULL no se excluyan del total, reemplazando NULL con 0 antes de sumar.
ISNULL en cláusulas ORDER BY
Si quieres ordenar registros, pero algunos valores son NULL y deseas tratarlos como vacíos:
SELECT Nombre, ISNULL(Ciudad, '') AS Ciudad
FROM Empleados
ORDER BY ISNULL(Ciudad, '');
Esto evita que los valores NULL se presenten de manera desordenada y los trata como cadenas vacías.
NULL con valores calculados
Puedes usar ISNULL para calcular un valor alternativo dinámico si se encuentra un NULL:
SELECT Nombre, ISNULL(Comision, Salario * 0.05) AS ComisionCalculada
FROM Empleados;
En este caso, si Comision es NULL, se calcula un valor basado en el 5% del Salario.
ISNULL con otras funciones de evaluación
Puedes usar ISNULL junto con funciones como CASE o COALESCE para escenarios más complejos:
SELECT Nombre,
CASE
WHEN ISNULL(Ciudad, '') = '' THEN 'No especificada'
ELSE Ciudad
END AS Ubicacion
FROM Empleados;
Esto evalúa si Ciudad es NULL o una cadena vacía, y devuelve un mensaje personalizado ('No especificada').
ISNULL y COALESCE
ISNULL: Permite solo dos argumentos y devuelve el primer argumento si no es NULL, de lo contrario, devuelve el segundo.
COALESCE: Acepta múltiples argumentos y devuelve el primer valor no nulo entre ellos. Es más flexible, pero ISNULL puede ser más rápido en ciertos escenarios.
Por ejemplo:
SELECT COALESCE(NULL, NULL, 'ValorPredeterminado') AS Resultado;
Resultado:
Resultado
-------------
ValorPredeterminado
ISNULL devuelve un valor con el mismo tipo de datos que el primer argumento (expression). Si expression es de tipo INT, el resultado también será INT.
COALESCE, ISNULL no es compatible con más de dos argumentos. Si necesitas evaluar múltiples valores, usa COALESCE.
ISNULL. Por ejemplo, si el segundo argumento tiene un tipo de datos diferente al primero, puede ocurrir una conversión automática que afecte el resultado.
Para más información sobre ISNULL, consulta la documentación oficial de Microsoft.
Jorge García
Fullstack developer