Consultas · guía rápida

NULLIF

Compara dos expresiones. Si son iguales, devuelve NULL; si son diferentes, devuelve la primera.

Lectura: 6–8 minEjemplo paso a pasoPráctica con pistas
Contenido de esta guía

Qué significa

NULLIF(valor1, valor2) devuelve NULL cuando ambos valores son iguales. Si son diferentes, devuelve valor1. Es una forma compacta de transformar un valor marcador —por ejemplo, cero— en ausencia de dato para un cálculo concreto.

Qué problema resuelve

Puede evitar que un valor especial participe en una agregación o convertir un denominador igual a cero en NULL. No modifica la tabla: solo cambia el valor producido por la expresión dentro de la consulta.

No lo confundas con COALESCE: NULLIF puede crear un NULL; COALESCE elige una alternativa cuando encuentra NULL.

Sintaxis básica

Estructura
NULLIF(valor1, valor2)

Su lógica se puede leer así: “si valor1 y valor2 son iguales, devuelve NULL; si no, conserva valor1”.

Ejemplo guiado

Stock de productos
nombrestock
Ratón18
Portátil Pro0
Auriculares11
Altavoz0

Queremos calcular el stock medio solo entre productos disponibles. Convertimos los ceros en NULL porque AVG ignora valores nulos:

SQL
SELECT ROUND(AVG(NULLIF(stock, 0)), 2) AS stock_medio_disponible
FROM productos;
Resultado esperado
stock_medio_disponible
11.57

Cómo funciona

  1. Para un stock distinto de cero, NULLIF devuelve el valor original.
  2. Para un stock igual a cero, devuelve NULL.
  3. AVG calcula el promedio de los valores no nulos.
  4. ROUND limita la presentación a dos decimales.

Error frecuente

Usarlo sin justificar el significado

Consulta problemática
SELECT AVG(NULLIF(precio, 0)) FROM productos;

Excluir precios iguales a cero solo es correcto si cero significa “dato no informado”. Si cero representa un producto gratuito, eliminarlo del promedio cambia la pregunta. Decide primero qué significa el valor en tus datos.

Comprueba lo aprendido

Básica · apoyo gradual

Evita un denominador igual a cero

Devuelve nombre y precio_por_unidad_stock para los productos con id 1 y 4. Divide precio entre NULLIF(stock, 0) y ordena por id.

Intermedia · transferencia autónoma

Cuenta pedidos no cancelados sin filtrar filas

Devuelve una única columna pedidos_no_cancelados usando COUNT y NULLIF. Convierte el estado 'cancelado' en NULL y no uses WHERE.

Compatibilidad y tipos

NULLIF está ampliamente soportado. El tipo del resultado suele derivarse de la primera expresión, pero las conversiones implícitas y el tratamiento de una división entre cero pueden variar entre motores. Utiliza expresiones de tipos compatibles y prueba el comportamiento en el sistema real.

Qué debes recordar

  • Devuelve NULL cuando las dos expresiones son iguales.
  • Si son diferentes, conserva la primera expresión.
  • No conviertas valores legítimos en NULL solo para obtener un resultado conveniente.

Conceptos relacionados

Fuentes técnicas consultadas

Se utilizaron para comprobar el comportamiento y el tipo de retorno. La explicación y los ejemplos son originales.