Error SQL · NULL y filtros

NULL en WHERE: por qué = NULL no devuelve filas

Si una comparación con NULL no devuelve las filas esperadas, revisa la lógica de tres valores antes de cambiar operadores o añadir condiciones.

Lectura: 12–16 minEjemplo reproduciblePráctica con pistas

El síntoma: comparas con NULL y desaparecen filas que esperabas ver

En SQL, NULL representa un valor desconocido o ausente. Una comparación ordinaria como telefono = NULL no produce TRUE: el resultado lógico queda desconocido. Como WHERE conserva únicamente las filas cuya condición resulta verdadera, esas filas no aparecen.

Por eso el diagnóstico no consiste en cambiar el operador al azar, sino en preguntar si realmente quieres comparar un valor o comprobar ausencia.

Ejemplo reproducible: = NULL devuelve cero filas

Usamos tres clientes; dos no tienen teléfono:

SQL que no expresa la intención
WITH clientes(id, nombre, telefono) AS (
  VALUES (1, 'Ana', '600111222'),
         (2, 'Luis', NULL),
         (3, 'Marta', NULL)
)
SELECT id, nombre
FROM clientes
WHERE telefono = NULL;
Resultado comprobado en SQLite
Filas devueltas
0

La corrección: usa IS NULL para comprobar ausencia

SQL corregido
WITH clientes(id, nombre, telefono) AS (
  VALUES (1, 'Ana', '600111222'),
         (2, 'Luis', NULL),
         (3, 'Marta', NULL)
)
SELECT id, nombre
FROM clientes
WHERE telefono IS NULL
ORDER BY id;
Clientes sin teléfono
idnombre
2Luis
3Marta

Diagnóstico en tres preguntas

  1. ¿Buscas ausencia? Usa IS NULL o IS NOT NULL.
  2. ¿El predicado contiene una columna nullable? Recuerda que algunas comparaciones pueden producir un estado desconocido.
  3. ¿Has añadido NOT? Negar una condición desconocida no la convierte automáticamente en verdadera.

Modelo mental: en SQL no basta con pensar en verdadero y falso. La lógica también puede producir un tercer estado, desconocido, y un filtro WHERE no conserva ese caso.

Error frecuente: cambiar = NULL por <> NULL

El operador cambia, pero el problema sigue

telefono <> NULL tampoco es la forma de pedir teléfonos presentes. Para esa intención usa telefono IS NOT NULL. Separa la comparación de valores de la comprobación de ausencia.

Práctica correctiva

Básica · NULL y filtros

Encuentra los clientes con teléfono conocido

Con los mismos tres clientes, escribe el predicado que devuelve solo a Ana.

Qué debes recordar

  • NULL no se compara como un valor ordinario.
  • WHERE conserva condiciones verdaderas; un resultado desconocido queda fuera.
  • Usa IS NULL e IS NOT NULL para comprobar ausencia o presencia.
  • Antes de tocar el SQL, define si quieres comparar un valor o comprobar que falta.

Conceptos relacionados

Fuentes técnicas consultadas