NULL: sin valor
En resumen: NULL en SQL significa un valor ausente o desconocido, por eso se comprueba con IS NULL y no con = NULL.
Problema
El cliente que desapareció
Marketing quiere escribir a todos los clientes que no son de Sofía. Hay 20 clientes, 6 de ellos de Sofía. Esperas 14:
Salen 13. ¿Quién falta? Boris Mitev, que nunca dijo de qué ciudad es. No es de Sofía, y sin embargo no está en el resultado.
La idea
Desconocido
La ciudad de Boris es NULL: la ausencia de un valor. No es texto vacío ni el número 0. Significa «no lo sabemos».
Por eso SQL trabaja con tres respuestas: verdadero, falso y desconocido. «¿La ciudad de Boris es distinta de Sofía?» No lo sabemos, su ciudad es desconocida. La respuesta es «desconocido», y WHERE conserva solo las filas para las que es verdadero.
Lo mismo pasa cuando buscas NULL con =:
Nada. NULL = NULL también es «desconocido»: dos valores desconocidos pueden ser iguales o no.
La idea
IS NULL
NULL tiene su propia comprobación: IS NULL, y lo contrario IS NOT NULL.
Es la única forma correcta. = NULL es un error que no da ningún mensaje, solo un resultado vacío.
Pruébalo
Sin categoría
Muestra el nombre y el precio de los productos que no tienen categoría. En el campo ya hay un intento. Ejecútalo y corrígelo.
Solución
SELECT name, price FROM products WHERE category_id IS NULL;WHERE category_id IS NULL: la tarjeta de regalo. No es un alimento ni un artículo del hogar.
Pruébalo
Todos los que no son de Sofía
Corrige la consulta del principio de la lección: todos los clientes que no son de Sofía, incluidos los que no tienen ciudad.
Solución
SELECT name, city FROM customers
WHERE city <> 'Sofía' OR city IS NULL;WHERE city <> 'Sofía' OR city IS NULL. Ahora son 14, con Boris. Siempre que una columna pueda ser NULL, pregúntate adónde van los vacíos en cada «distinto de».
Míralo
NOT IN y un NULL
Una lista NOT IN con un NULL dentro devuelve un resultado vacío:
¿Por qué? city NOT IN ('Sofía', NULL) significa city <> 'Sofía' AND city <> NULL. La segunda parte es siempre «desconocido», así que la condición completa nunca es verdadera.
Rara vez escribirás NULL a mano en una lista. Pero cuando la lista viene de otra consulta y trae un NULL, obtienes un informe vacío sin ningún error. Lo volveremos a encontrar con las subconsultas.
Ejercicio
Los productos con categoría
Muestra el nombre y la categoría de todos los productos que tienen categoría.
Solución
SELECT name, category_id FROM products WHERE category_id IS NOT NULL;WHERE category_id IS NOT NULL. 24 productos, todos menos la tarjeta de regalo.
Test
Ponte a prueba
Lecciones relacionadas
Sección «Lecciones relacionadas»- Se basa en: SELECT: elegir columnas · WHERE: filtrar filas · IN, BETWEEN y LIKE
- Continúa en: ORDER BY, LIMIT y DISTINCT · Aritmética en una consulta · Funciones de texto · CASE y los valores que faltan
- Ejercicios sobre el tema: Leer datos