Al terminar, podrás
- Distinguir NULL de cero y texto vacío.
- Buscar valores ausentes con IS NULL.
- Explicar por qué una comparación ordinaria con NULL no es verdadera.
Recupera lo aprendido: ¿Un correo ausente equivale a una cadena vacía o al número 0?
La idea clave
NULL representa la ausencia de un valor conocido. No significa cero, texto vacío ni falso. Como no hay un valor con el que comparar, expresiones como email = NULL no producen verdadero: producen un resultado desconocido.
email = 'ana@example.test' | email = NULL | email IS NULL | |
|---|---|---|---|
| ana@example.test | verdadero | desconocido | falso |
| NULL | desconocido | desconocido | verdadero |
La clave es que desconocido no cuenta como verdadero. Por eso WHERE descarta esas filas y para preguntar por ausencia necesitas IS NULL.
Lógica de tres valores: una condición SQL puede ser verdadera, falsa o desconocida. WHERE conserva únicamente las filas cuya condición es verdadera.
La sintaxis básica
WHERE columna IS NULL
WHERE columna IS NOT NULLUtiliza IS NULL para localizar valores ausentes e IS NOT NULL para conservar las filas que sí contienen un valor.
Ejemplo paso a paso
| id | nombre | |
|---|---|---|
| 1 | Ana Torres | ana@example.test |
| 2 | Luis Martín | luis@example.test |
| 3 | Marta Ruiz | marta@example.test |
| 4 | Diego López | NULL |
| 5 | Sara Gómez | sara@example.test |
| 6 | Pablo Sanz | NULL |
| 7 | Lucía Vega | lucia@example.test |
| 8 | Hugo Castro | hugo@example.test |
| 9 | Noa Vidal | noa@example.test |
| 10 | Iván Mora | ivan@example.test |
| 11 | Elena Rey | elena@example.test |
| 12 | Mario Gil | NULL |
Buscamos los clientes cuyo correo todavía no se conoce.
SELECT nombre, email
FROM clientes
WHERE email IS NULL;| nombre | |
|---|---|
| Diego López | NULL |
| Pablo Sanz | NULL |
| Mario Gil | NULL |
Cómo funciona
- El motor examina la columna
emailde cada fila. IS NULLes verdadero únicamente cuando el valor está ausente.- Las filas que contienen una dirección de correo quedan fuera.
Un error habitual
Comparar NULL con el signo igual
SELECT nombre
FROM clientes
WHERE email = NULL;La consulta no identifica los correos ausentes. Sustituye la comparación por WHERE email IS NULL. Del mismo modo, utiliza IS NOT NULL en lugar de <> NULL.
Practica con datos
Laboratorio SQL
Resuelve la consulta
Escribe una consulta que devuelva nombre y email de los clientes que sí tengan email.
Resultado esperado: 9 filas con nombre, email. El orden de las filas no importa.
Ver tablas y datos
Cargando la estructura del ejercicio…
Utiliza IS NOT NULL.
No uses <> NULL.
Selecciona nombre y email.
Solución
SELECT nombre, email FROM clientes WHERE email IS NOT NULL;IS NOT NULL conserva las filas que contienen un valor conocido.
Puedes consultar la solución y volver a intentarlo. La práctica se completa cuando tu consulta funciona.
La consulta usa datos ficticios y se ejecuta solo en este navegador.
Fuentes técnicas consultadas
Las referencias explican las comparaciones con valores ausentes y el hecho de que WHERE solo conserve condiciones verdaderas.
- PostgreSQL: comparaciones y comprobaciones de NULL
- SQLite: operadores IS NULL e IS NOT NULL
- PostgreSQL: procesamiento de WHERE
Comprueba si puedes explicarlo
Si email es NULL, ¿WHERE email <> una dirección conocida conserva esa fila?
Ver respuesta razonada
No. La comparación produce desconocido. Para incluir también los correos ausentes, combina la comparación con OR email IS NULL. NOT tampoco convierte desconocido en verdadero.
Responde antes de abrir la explicación. Si necesitaste ayuda, cierra la respuesta y vuelve a explicarlo con tus palabras antes de dar la lección por aprendida.
Qué debes recordar
- NULL representa un valor desconocido o ausente.
- Usa IS NULL e IS NOT NULL, no = NULL ni <> NULL.
- WHERE conserva únicamente condiciones verdaderas; las desconocidas quedan fuera.
A continuación: Continúa con Práctica: elige el filtro adecuado.
Para una comparación entre dos valores opcionales que siempre devuelva verdadero o falso, amplía este modelo con IS DISTINCT FROM.