COALESCE en SQL: controlar valores NULL

Secuencia de valores NULL que entrega el primer dato disponible mediante COALESCE

COALESCE en SQL devuelve la primera expresión que no es NULL de una lista. Se utiliza para mostrar valores alternativos, completar cálculos y establecer prioridades entre columnas. Es una herramienta compacta, pero no debe ocultar problemas de calidad ni convertir valores ausentes en datos inventados.

Sintaxis y primer ejemplo

SELECT COALESCE(nombre_preferido, nombre_legal, "Sin nombre") AS nombre
FROM clientes;

Para cada fila, el motor evalúa las expresiones en orden y devuelve la primera no nula. Si todas son NULL, el resultado es NULL, salvo que la lista termine con un literal no nulo.

NULL no es cero ni cadena vacía

NULL representa ausencia o desconocimiento. No equivale a 0, FALSE ni "". COALESCE(valor, 0) introduce una decisión de negocio: trata la ausencia como cero. Esa decisión puede ser correcta para una métrica concreta y errónea para otra.

Por ejemplo, una venta sin importe registrado no demuestra una venta de cero. Antes de reemplazar, define el significado del nulo y conserva una forma de auditarlo.

Evitar que NULL anule un cálculo

En muchas expresiones, operar con NULL produce NULL:

SELECT
    cantidad * COALESCE(precio_unitario, 0) AS total
FROM lineas_pedido;

Este cálculo evita un resultado nulo, pero puede infravalorar el total. Una opción analítica es devolver tanto el total calculado como una bandera de dato incompleto.

Las funciones agregadas suelen ignorar NULL, aunque su comportamiento concreto y el caso sin filas deben revisarse. No uses COALESCE sin entender cómo trata nulos la función implicada.

Prioridad entre varias fuentes

COALESCE expresa una jerarquía:

SELECT COALESCE(telefono_movil, telefono_fijo, telefono_empresa)
FROM contactos;

El orden es una regla de negocio. Documenta por qué una fuente tiene prioridad y normaliza cadenas vacías, porque una cadena vacía no es NULL y detendrá la búsqueda.

Puedes combinar NULLIF para convertir un valor centinela en NULL:

COALESCE(NULLIF(TRIM(telefono_movil), ""), telefono_fijo)

Tipos de datos

Las expresiones deben poder convertirse a un tipo común. Mezclar números y texto puede fallar o provocar conversiones inesperadas, según el motor. Aplica CAST de forma explícita cuando presentas un número como texto:

COALESCE(CAST(descuento AS VARCHAR(20)), "No aplica")

Las reglas de precedencia de tipos no son idénticas en todas las bases de datos. Prueba la consulta en tu plataforma y revisa el tipo final, no solo el valor mostrado.

COALESCE frente a CASE e ISNULL

COALESCE forma parte del estándar SQL y admite varias expresiones. CASE permite condiciones más generales y suele ser más claro cuando la decisión no depende únicamente de NULL.

Algunos motores ofrecen ISNULL, IFNULL o NVL con reglas propias de argumentos y tipos. No asumas que son intercambiables en portabilidad o metadatos. Consulta la documentación de la versión utilizada.

Filtros e índices

Aplicar COALESCE sobre una columna en WHERE puede impedir que un índice simple se aproveche de la forma esperada:

WHERE COALESCE(estado, "pendiente") = "pendiente"

Una condición equivalente y más explícita podría ser estado = "pendiente" OR estado IS NULL. La elección depende del optimizador y los datos; compara planes y considera índices funcionales cuando el motor los admite.

No coloques funciones sobre una columna indexada por costumbre. Mantén predicados sargables y mide.

Ordenación y agrupación

COALESCE puede colocar una etiqueta para presentar grupos, pero agrupar todos los nulos bajo “Sin dato” modifica la salida semántica. Es útil en informes, siempre que el usuario entienda que no es un valor real.

En ORDER BY, define si los nulos deben aparecer primero, al final o con una prioridad específica. Algunos motores tienen NULLS FIRST/LAST; otros requieren una expresión CASE.

Buenas prácticas

Decide el significado de NULL por columna; usa reemplazos coherentes; evita perder la señal de datos incompletos; controla tipos con CAST; normaliza cadenas vacías; revisa filtros en planes de ejecución; y agrega pruebas con todos los argumentos nulos.

COALESCE es excelente para expresar alternativas, pero la claridad depende de que cada valor de respaldo sea legítimo y esté ordenado con intención.

Continúa aprendiendo

Amplía este tema con nuestras guías sobre funciones de ventana en SQL, índices de bases de datos, UNION y UNION ALL.

Fuentes oficiales

Preguntas frecuentes

¿Qué hace COALESCE en SQL?
Devuelve la primera expresión no nula de una lista y devuelve NULL si todas las expresiones son nulas.

¿NULL es igual a cero?
No. NULL representa ausencia o desconocimiento; sustituirlo por cero es una decisión de negocio.

¿COALESCE acepta más de dos argumentos?
Sí. Evalúa la lista en orden hasta encontrar la primera expresión que no sea NULL.

¿Cuál es la diferencia entre COALESCE y CASE?
COALESCE resuelve prioridades basadas en NULL; CASE permite condiciones generales más expresivas.

¿Puede afectar a un índice?
Una función sobre una columna en WHERE puede dificultar el uso de un índice simple. Conviene revisar el plan de ejecución.

¿Cómo trato cadenas vacías?
Una cadena vacía no es NULL. Puedes normalizarla con NULLIF y después aplicar COALESCE.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir