Filtros · lógica de tres valores

IS NULL / IS NOT NULL

NULL representa un dato desconocido o ausente. Por eso no se compara con =: se comprueba mediante IS NULL o IS NOT NULL.

Lectura: 6–8 minEjemplo comprobadoPráctica con pistas
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

SQL
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

SQL
SELECT id, nombre, email
FROM clientes
WHERE email IS NULL
ORDER BY id;
Resultado comprobado
idnombreemail
4Diego LópezNULL
6Pablo SanzNULL
12Mario GilNULL

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.

SQL
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

Básica · filtros

Clientes activos con correo conocido

Muestra id, nombre y email de los clientes activos que sí tienen correo. Ordena por identificador.

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

  • NULL representa un valor desconocido o ausente.
  • Se comprueba con IS NULL o IS NOT NULL.
  • WHERE conserva solo condiciones verdaderas.
  • COUNT(columna) ignora los valores NULL.

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.

Conceptos relacionados

Fuentes técnicas consultadas