Fundamentos

NULL y COALESCE en SQL: manejar valores faltantes

Maneje los valores faltantes explícitamente para producir filtros, cálculos e informes confiables.

Equipo de SQL.tn10 min
Editor SQL que muestra cómo manejar los valores faltantes en una tabla

¿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.

Las personas, los pedidos y los datos de contacto de este artículo son ficticios y tienen únicamente fines educativos.

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 = NULL o telephone <> NULL.
Clientes sin número de teléfono
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.

Productos sin descuento positivo
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.

Elige el mejor contacto disponible
SELECT
  nom,
  COALESCE(telephone, email, 'Sin información') AS contact
FROM clients
ORDER BY nom ASC;
Los argumentos para COALESCE deben tener tipos compatibles. El texto alternativo es adecuado para una columna de texto, no directamente para un cálculo numérico.

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.
Precio neto con descuento opcional
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.

Midiendo la tasa de inteligencia
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.

Empezar el ejercicio