En SQL, el valor NULL significa "desconocido" o "valor ausente". Se comporta de manera especial:
NULL con cualquier valor a través de = o <> siempre dará un resultado de UNKNOWN, y no TRUE o FALSE.NULL usando IS NULL o IS NOT NULL.NULL dará NULL.Ejemplo:
SELECT * FROM users WHERE name = NULL; -- no devolverá ninguna fila SELECT * FROM users WHERE name IS NULL; -- correcto SELECT 1 + NULL; -- Resultado: NULL
Para reemplazar NULL se utilizan funciones como COALESCE(foo, 0) (toma el primer valor no-NULL) o ISNULL(foo, 'default') en SQL Server.
Pregunta: ¿Qué resultado devolverá la condición WHERE some_column <> 'value' en las filas donde some_column es NULL?
Respuesta:
En estas filas, la condición no se cumplirá: la comparación con NULL dará UNKNOWN, y no TRUE. Por lo tanto, las filas con NULL no aparecerán en el resultado.
Ejemplo:
-- some_column | ... -- NULL | ... -- 'abc' | ... -- 'value' | ... SELECT * FROM table WHERE some_column <> 'value'; -- La fila con NULL no aparecerá
Historia
WHERE status <> 'closed' no tuvo en cuenta las cuentas con el valor status = NULL (por ejemplo, nuevas solicitudes). Como resultado, se contaron incorrectamente las cuentas activas: el número resultó ser un 15% menor.Historia
COALESCE(user_name, 'Estimado cliente') en el envío. Casi mil clientes recibieron mensajes sin nombre, lo que se percibió como un error de automatización.Historia
Durante la migración de la base de datos, LEFT JOIN devolvía más filas de lo esperado. Resultó que en la tabla de la izquierda había campos con NULL; los filtros como WHERE b.field = 'X' después del JOIN descartaban estas filas, lo que provocó la pérdida de parte de los datos.