Contenido de esta guía
Qué comprueban IS NULL e IS NOT NULL
IS NULL conserva las filas donde una expresión no tiene un valor conocido. IS NOT NULL conserva las filas donde sí existe un valor.
NULL no es una cadena vacía, el número cero ni la palabra «NULL». Es una marca que indica que el dato no está disponible. Dos valores desconocidos tampoco se consideran automáticamente iguales.
Sintaxis básica
SELECT columnas
FROM tabla
WHERE columna IS NULL;
SELECT columnas
FROM tabla
WHERE columna IS NOT NULL;No escribas columna = NULL. Una comparación ordinaria con NULL produce un resultado desconocido, no verdadero.
Ejemplo guiado: clientes sin correo
SELECT id, nombre, email
FROM clientes
WHERE email IS NULL
ORDER BY id;| id | nombre | |
|---|---|---|
| 4 | Diego López | NULL |
| 6 | Pablo Sanz | NULL |
| 12 | Mario Gil | NULL |
La condición no intenta adivinar por qué falta el correo. Solo comprueba que el valor almacenado es desconocido.
Por qué WHERE descarta lo desconocido
En SQL, una condición puede ser verdadera, falsa o desconocida. WHERE conserva únicamente las filas para las que la condición es verdadera. Por eso email = NULL no encuentra las filas sin correo: el resultado de esa comparación es desconocido.
Esta regla también afecta a expresiones como NOT (email = NULL). Negar un resultado desconocido sigue produciendo desconocido. Usa el predicado específico que expresa tu intención.
NULL y las funciones de agregación
COUNT(*) cuenta filas. COUNT(email) cuenta únicamente filas donde email no es NULL. En la tabla clientes existen 12 filas, pero solo 9 correos conocidos.
SELECT COUNT(*) AS clientes,
COUNT(email) AS correos_conocidos
FROM clientes;Errores frecuentes
Confundir NULL con una cadena vacía
email IS NULL no encuentra ''. Si tu sistema permite ambos estados, tendrás que decidir si representan situaciones diferentes y filtrar cada uno de forma explícita.
Usar NOT IN cuando la lista puede contener NULL
La presencia de un valor desconocido puede volver desconocida la comparación. Para exclusiones complejas, revisa los datos y considera NOT EXISTS.
Práctica guiada
Clientes activos con correo conocido
Muestra id, nombre y email de los clientes activos que sí tienen correo. Ordena por identificador.
IS NOT NULL.email IS NOT NULL y activo = 1 con AND.Solución razonada
SELECT id, nombre, email
FROM clientes
WHERE email IS NOT NULL
AND activo = 1
ORDER BY id;La consulta devuelve nueve filas. La primera condición exige un correo conocido y la segunda mantiene solo clientes activos.
Compatibilidad entre motores
IS NULL e IS NOT NULL son la forma portable de comprobar valores desconocidos. Algunos motores añaden predicados para comparar valores tratando dos NULL como equivalentes; utiliza esas extensiones solo cuando las necesites y documenta el motor.
Qué debes recordar
NULLrepresenta un valor desconocido o ausente.- Se comprueba con
IS NULLoIS NOT NULL. WHEREconserva solo condiciones verdaderas.COUNT(columna)ignora los valoresNULL.
Cuando necesites comparar dos expresiones y tratar dos NULL como equivalentes, consulta IS DISTINCT FROM / IS NOT DISTINCT FROM. Si el problema es su posición al ordenar, revisa NULLS FIRST y NULLS LAST.