COALESCE
NVL (Oracle), IFNULL (MySQL)
COALESCE es una función SQL estándar que acepta una lista de expresiones y devuelve la primera que no es NULL. Si todas las expresiones son NULL, devuelve NULL.
Sintaxis #
COALESCE(expresion1, expresion2, expresion3, ...)
Equivale a una cadena de CASE WHEN:
CASE WHEN expresion1 IS NOT NULL THEN expresion1
WHEN expresion2 IS NOT NULL THEN expresion2
WHEN expresion3 IS NOT NULL THEN expresion3
ELSE NULL END
Uso en las jerarquías #
En el contexto de las ragged hierarchies, COALESCE se usa a menudo para rellenar los niveles faltantes:
COALESCE(top_group_name, group_name, client_name) AS top_group_name
Esto funciona como workaround en los reportes, pero tiene limitaciones importantes: debe repetirse en cada consulta, no distingue los valores originales de los de fallback, y complica el código.
Alternativas por base de datos #
- Oracle:
NVL(a, b)para dos valores,COALESCEpara más de dos - MySQL:
IFNULL(a, b)para dos valores,COALESCEpara más de dos - PostgreSQL: solo
COALESCE(SQL estándar)
Enfoque recomendado en el DWH #
En un data warehouse, es preferible usar COALESCE en el ETL para poblar la tabla dimensional con valores NOT NULL (self-parenting), en lugar de usarla repetidamente en los reportes. La lógica de gestión de NULLs debe estar en el modelo, no en la presentación.