Tema SQL
NULLIF() (MySQL / MariaDB)
Devuelve NULL si dos expresiones son iguales; en caso contrario devuelve la primera. Forma parte del estándar SQL y está disponible también en PostgreSQL, SQL Server y Oracle con la misma semántica.
Descripción
NULLIF(a, b) es útil para normalizar «sentinelas» (p. ej. convertir 0 en NULL para no contaminar medias), evitar división por cero combinándola con COALESCE/IFNULL en el divisor, o preparar datos para funciones que ignoran NULL. La comparación usa las reglas de igualdad del tipo; con tipos distintos puede haber conversión implícita. No confundir con IFNULL: NULLIF compara dos valores, IFNULL sustituye NULL por otro. En MySQL, NULLIF es determinista y se puede usar en expresiones generadas y vistas.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
NULLIF(expresión_a, expresión_b)
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Igualdad
- Si a = b según el motor, resultado NULL; si no, resultado a.
- Tipos
- Ambos argumentos deberían ser compatibles; mezclas extrañas pueden producir conversiones implícitas.
- Uso típico
- Limpiar valores centinela antes de agregaciones o exportaciones.
Ejemplos
Ejemplo 1
SELECT NULLIF(10, 10) AS x;
-- x es NULL
SELECT NULLIF(codigo, '') AS codigo_limpio
FROM productos;
Ejemplo 2
SELECT nombre, NULLIF(TRIM(codigo), '') AS codigo_valido
FROM articulos;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.