¿Qué significa NULL en SQL?
NULL informa la ausencia de un valor conocido. No representa cero, una cadena vacía ni el texto "NULL". Una fecha de entrega NULL puede significar, por ejemplo, que el pedido aún no ha sido entregado.
Este matiz es fundamental: sustituir automáticamente una ausencia por cero puede transformar información desconocida en una declaración incorrecta. Antes de cualquier consulta, documente por qué la columna acepta NULL.
Busque un valor faltante con IS NULL
La condición telephone = NULL no devuelve las filas esperadas. Una comparación con un valor desconocido produce un resultado desconocido, que WHERE no conserva.
Por lo tanto, SQL proporciona los operadores IS NULL y IS NOT NULL. El primero busca ausencias; el segundo mantiene los valores ingresados.
- Correcto:
telephone IS NULL. - Correcto:
telephone IS NOT NULL. - Incorrecto:
telephone = NULLotelephone <> NULL.
SELECT id_client, nom
FROM clients
WHERE telephone IS NULL
ORDER BY id_client ASC;¿Por qué NULL cambia las condiciones?
Una condición SQL puede ser verdadera, falsa o desconocida. Si remise vale NULL, las expresiones remise = 0, remise > 0 y remise <> 0 se desconocen: ninguna permite deducir el importe real.
Esta lógica explica por qué una condición negativa no necesariamente recupera todas las demás filas. Cuando la regla deba incluir ausencias, escríbala explícitamente con OR remise IS NULL.
SELECT produit, remise
FROM produits
WHERE remise = 0
OR remise IS NULL;COALESCE devuelve el primer valor disponible
COALESCE lee sus argumentos de izquierda a derecha y devuelve el primero que no es NULL. Esta función es útil para mostrar una etiqueta alternativa o elegir entre varios métodos de contacto.
No modifica los datos registrados. El reemplazo sólo existe en el resultado de la consulta, que conserva la información original.
SELECT
nom,
COALESCE(telephone, email, 'Sin información') AS contact
FROM clients
ORDER BY nom ASC;Reemplace NULL en un cálculo solo si la regla lo permite
Una cantidad NULL generalmente hace que un cálculo aritmético sea desconocido. Si el modelo de negocio establece que un descuento faltante es efectivamente igual a cero, COALESCE puede hacer explícita esta regla.
Por otra parte, los ingresos desconocidos no deberían transformarse arbitrariamente en ingresos cero. Esta decisión reduciría artificialmente un promedio y podría distorsionar un indicador.
- Establezca la dirección de NULL antes del cálculo.
- Utiliza un valor de reemplazo del mismo tipo.
- Conserva la ausencia si contiene información útil.
SELECT
produit,
prix - COALESCE(remise, 0) AS prix_net
FROM produits;COUNT, SUM y AVG no tratan todos a NULL de la misma manera
COUNT(*) cuenta todas las filas, mientras que COUNT(colonne) ignora los valores de NULL en esta columna. Esta diferencia facilita medir el número total de clientes y el número de teléfonos ingresados.
SUM y AVG también ignoran los valores de NULL. Al utilizar AVG(COALESCE(note, 0)), por el contrario, se añaden las ausencias al denominador con valor cero: el resultado, por tanto, ya no tiene el mismo significado.
SELECT
COUNT(*) AS nombre_clients,
COUNT(telephone) AS telephones_renseignes,
ROUND(100.0 * COUNT(telephone) / NULLIF(COUNT(*), 0), 1) AS taux_renseignement
FROM clients;Errores comunes a evitar
El procesamiento de NULL debe ser visible en la consulta y justificado por la necesidad del negocio, no agregado solo para eliminar casillas vacías.
- Compara una columna en NULL con
=o<>. - Confuso NULL, cero y cadena vacía.
- Utiliza COALESCE sin comprobar la compatibilidad de tipos.
- Sustituir las ausencias por cero antes de AVG sin justificación.
- Olvidando que una concatenación u operación puede convertirse en NULL dependiendo del motor SQL.
Un método fiable en cuatro preguntas
Primero pregunte por qué falta el valor y luego si esta ausencia debe conservarse, filtrarse o reemplazarse. Luego elija IS NULL, IS NOT NULL o COALESCE según la respuesta.
Finalmente, comprueba la cantidad de registros devueltos y vuelva a calcular una pequeña muestra a mano. El ejercicio dedicado a COALESCE le permite aplicar este método en una tabla de clientes simple.
Pon esta guía en práctica.
Abre el ejercicio relacionado, ejecuta tu consulta y compara el resultado esperado.
