IS NULL / IS NOT NULL en SQL: qué son, cómo se usan y ejemplos prácticos

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ón NOT NULL.
  • Los cálculos con NULL suelen devolver NULL (ej.: 10 + NULL = NULL).

Ejemplo de tabla clientes:

idnombretelefono
1Ana123456
2LuisNULL
3Carla987654

👉 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

  • NULL0.
  • NULL ≠ cadena vacía ''.
  • NULLfalse.

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

  1. Usar = NULL en lugar de IS NULL
    👉 Siempre devuelve vacío.
  2. Olvidar que NULL afecta cálculos
    SUM(columna) ignora nulos automáticamente, pero operaciones aritméticas directas no.
  3. Confundir NULL con cadena vacía
    En MySQL, ''NULL.
  4. 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 sea NOT 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 como COALESCE.

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.

Scroll al inicio