Referencia de funciones

NULLIF

Compara dos valores y devuelve NULL si son iguales.

MySQL 8.4
NULLIF(value_1, value_2)
value_1
Valor que se devuelve si los argumentos son distintos
value_2
Valor con el que se compara value_1

Valor devuelto

NULL si los argumentos son iguales; si no, value_1

Ejemplos

Valores iguales dan NULL

MySQL 8.4
SELECT NULLIF('SQL Academy', 'SQL Academy');
NULLIF('SQL Academy', 'SQL Academy')
<NULL>

Valores distintos dan el primero

MySQL 8.4
SELECT NULLIF('SQL', 'Academy');
NULLIF('SQL', 'Academy')
SQL

Los códigos promocionales vacíos no se cuentan

MySQL 8.4
SELECT COUNT(promo_code) AS filled,
	COUNT(NULLIF(TRIM(promo_code), '')) AS with_code
FROM orders;
filledwith_code
297177

División sin dividir entre cero

MySQL 8.4
SELECT session_id,
	pages_viewed,
	duration_sec,
	ROUND(pages_viewed * 60 / NULLIF(duration_sec, 0), 1) AS pages_per_minute
FROM sessions
WHERE duration_sec < 20
ORDER BY session_id
LIMIT 5;
session_idpages_viewedduration_secpages_per_minute
s_000015100<NULL>
s_000071169106.7
s_000134110<NULL>
s_00016340<NULL>
s_0002053199.5

Detalles

NULLIF(a, b) es una forma abreviada de CASE WHEN a = b THEN NULL ELSE a END. Casi siempre se usa para convertir un valor «vacío» en NULL: así lo omiten COUNT, AVG y COALESCE.

El segundo uso habitual es la división: x / NULLIF(y, 0) devuelve NULL en lugar de dividir entre cero. En MySQL, dividir entre 0 ya da NULL, pero en PostgreSQL da un error, así que la forma con NULLIF funciona igual en ambos SGBD.

Véase también

Dónde aprenderlo