En SQL, el valor NULL representa la ausencia de un dato: un campo sin valor asignado.
Esto no es lo mismo que un 0
, una cadena vacía ''
o false
.
Para trabajar con valores nulos, SQL no permite compararlos con =
o !=
.
👉 En su lugar, existen los operadores IS NULL y IS NOT NULL.
¿Qué es NULL en SQL?
- NULL significa “desconocido”, “no aplicable” o “sin valor asignado”.
- Una columna puede contener
NULL
si no tiene restricciónNOT NULL
. - Los cálculos con
NULL
suelen devolverNULL
(ej.:10 + NULL = NULL
).
Ejemplo de tabla clientes
:
id | nombre | telefono |
---|---|---|
1 | Ana | 123456 |
2 | Luis | NULL |
3 | Carla | 987654 |
👉 El cliente Luis no tiene teléfono registrado.
Uso de IS NULL
Se utiliza para filtrar filas en las que un campo no tiene valor.
SELECT * FROM clientes
WHERE telefono IS NULL;
👉 Devuelve todos los clientes sin número de teléfono (más sobre WHERE).
Uso de IS NOT NULL
Se utiliza para filtrar filas en las que un campo sí tiene valor.
SELECT * FROM clientes
WHERE telefono IS NOT NULL;
👉 Devuelve clientes que sí tienen teléfono registrado.
Ejemplos prácticos de IS NULL / IS NOT NULL
1) Buscar pedidos sin fecha de envío
SELECT * FROM pedidos
WHERE fecha_envio IS NULL;
2) Seleccionar productos con precio registrado
SELECT * FROM productos
WHERE precio IS NOT NULL;
3) Contar registros incompletos
SELECT COUNT(*) AS incompletos
FROM usuarios
WHERE email IS NULL;
👉 Más sobre COUNT.
4) Actualizar valores nulos
UPDATE empleados
SET salario = 1000
WHERE salario IS NULL;
👉 Asigna un salario mínimo a empleados que no lo tienen. Se utiliza UPDATE.
5) Evitar filas nulas en cálculos
SELECT AVG(precio)
FROM productos
WHERE precio IS NOT NULL;
👉 Calcula el promedio ignorando los valores nulos (ver AVG).
Comparaciones incorrectas con NULL
Un error muy común es escribir:
-- ❌ Incorrecto
WHERE telefono = NULL;
o
-- ❌ Incorrecto
WHERE telefono != NULL;
👉 Esto nunca devuelve resultados, porque NULL
no se compara con operadores estándar.
La única forma válida es con IS NULL
o IS NOT NULL
.
IS NULL en combinaciones con JOIN
Los NULL
también aparecen en joins, especialmente con LEFT JOIN
:
SELECT c.nombre, p.total
FROM clientes c
LEFT JOIN pedidos p ON c.id = p.cliente_id
WHERE p.id IS NULL;
👉 Devuelve clientes que no tienen pedidos (porque en la tabla pedidos
no hay coincidencia, y p.id
queda NULL
).
IS NULL con condiciones múltiples
Podemos combinarlo con otros filtros:
SELECT * FROM empleados
WHERE fecha_baja IS NULL AND activo = TRUE;
👉 Devuelve empleados activos que no tienen fecha de baja.
Funciones útiles para manejar NULL
En muchos motores existen funciones especiales:
- COALESCE(expr, valor_defecto) → reemplaza
NULL
por un valor.
SELECT nombre, COALESCE(telefono, 'No informado') AS tel
FROM clientes;
- IFNULL(col, valor) (MySQL).
- NVL(col, valor) (Oracle).
👉 Son muy útiles para mostrar valores alternativos en reportes.
Diferencias entre NULL y otros valores
NULL
≠0
.NULL
≠ cadena vacía''
.NULL
≠false
.
Ejemplo:
SELECT * FROM facturas WHERE descuento = 0; -- tiene descuento cero
SELECT * FROM facturas WHERE descuento IS NULL; -- no tiene valor asignado
Errores comunes con IS NULL
- Usar = NULL en lugar de IS NULL
👉 Siempre devuelve vacío. - Olvidar que NULL afecta cálculos
SUM(columna)
ignora nulos automáticamente, pero operaciones aritméticas directas no. - Confundir NULL con cadena vacía
En MySQL,''
≠NULL
. - Usar NOT IN con NULL
SELECT * FROM clientes WHERE id NOT IN (1,2,NULL);
👉 Esto devuelve cero filas, porque la lista contiene NULL
. Lo correcto es usar NOT EXISTS
.
Buenas prácticas con IS NULL / IS NOT NULL
- Siempre usar estas expresiones para verificar valores nulos.
- Cuando se necesite mostrar algo alternativo, usar
COALESCE
. - En diseño de bases de datos, definir bien qué columnas pueden ser nulas.
- Evitar usar
NULL
en exceso: si un campo puede tener valor por defecto (ej.0
en cantidad), es mejor que seaNOT NULL
. - Documentar el significado de
NULL
: ¿es “no aplica”, “desconocido” o “aún no registrado”?
Ejemplo avanzado: reporte de clientes activos e inactivos
SELECT
nombre,
CASE
WHEN fecha_baja IS NULL THEN 'Activo'
ELSE 'Inactivo'
END AS estado
FROM clientes;
👉 Marca como activos a clientes sin fecha de baja, e inactivos al resto (ver más sobre CASE).
Preguntas frecuentes (FAQ)
1. ¿Por qué no puedo usar = NULL?
Porque NULL
no es un valor sino un estado de ausencia. Se debe usar IS NULL
.
2. ¿IS NULL afecta al rendimiento?
Sí, puede ser más lento que comparar valores normales, especialmente si la columna no está indexada. Algunos motores permiten índices especiales para valores nulos.
3. ¿Las funciones agregadas cuentan NULL?
No. Por ejemplo, COUNT(columna)
no cuenta nulos, pero COUNT(*)
sí cuenta todas las filas.
4. ¿Se puede indexar NULL?
Sí, aunque depende del motor. En PostgreSQL y Oracle los índices pueden incluir NULL; en MySQL depende del motor de almacenamiento.
5. ¿Qué diferencia hay entre IS NULL y COALESCE?
IS NULL
verifica si hay un valor nulo.COALESCE
reemplaza el nulo por un valor alternativo.
Conclusión
Los operadores IS NULL y IS NOT NULL son esenciales en SQL para trabajar con valores nulos.
- Permiten identificar registros incompletos.
- Son clave en validaciones y reportes.
- Se usan en combinación con
JOIN
,WHERE
y funciones comoCOALESCE
.
Dominar su uso evita errores comunes y asegura consultas precisas.
Aprende a detectar y filtrar valores nulos en WHERE y condiciones y consulta otras entradas en el Glosario SQL completo.