CodeGym /Cursos /SQL SELF /Función NULLIF() — sintaxis y ejemplos de uso

Función NULLIF() — sintaxis y ejemplos de uso

SQL SELF
Nivel 9 , Lección 4
Disponible

Vamos a hablar de otra función para trabajar con el misterioso NULLNULLIF(). Te va a ayudar en situaciones donde necesitas reemplazar ciertos valores por NULL para manejar los datos correctamente. ¡Abróchate el cinturón, que esto va a estar interesante!

La función NULLIF() es una herramienta genial en PostgreSQL que te permite comparar dos valores y devolver NULL si son iguales, o devolver el primer valor si son diferentes. Es como si dijera: "¡Si estos valores son iguales, los ignoramos!"

Aquí tienes la sintaxis básica de la función:

NULLIF(value1, value2)

Si value1 y value2 son iguales, el resultado será NULL. Si son diferentes, el resultado será value1.

Ejemplo:

SELECT NULLIF(10, 10); -- Resultado: NULL
SELECT NULLIF(10, 20); -- Resultado: 10
SELECT NULLIF('hola', 'hola'); -- Resultado: NULL
SELECT NULLIF('hola', 'mundo'); -- Resultado: 'hola'

Fácil, ¿verdad? Ahora vamos a ver cómo usar esta función en problemas reales.

Ejemplo 1: Evitar división por cero

Dividir por cero es la pesadilla de cualquier programador. En SQL, si intentas dividir por cero, te dará un error. Aquí es donde NULLIF() nos salva.

Imagina que tienes una tabla sales con dos columnas: revenue (ingresos) y expenses (gastos). Queremos calcular la rentabilidad de los gastos (revenue / expenses), pero a veces los gastos son cero. Si hacemos la consulta sin comprobar nada, nos dará un error de división por cero.

Tabla sales:

revenue expenses
1000 200
1500 0
2000 250

Consulta errónea:

SELECT revenue / expenses AS profitability
FROM sales;
-- Error: división por cero!

Solución con NULLIF():

SELECT revenue / NULLIF(expenses, 0) AS profitability
FROM sales;

Resultado:

profitability
5.00
NULL
8.00

Ahora, si expenses es 0, NULLIF(expenses, 0) devuelve NULL, y dividir por NULL no da error, simplemente devuelve NULL.

Ejemplo 2: Reemplazar valores iguales por NULL

Imagina que tienes una tabla con datos de estudiantes, con las columnas first_name y preferred_name. A veces los estudiantes prefieren su nombre real, y a veces eligen otro. Si ambos nombres son iguales, no tiene sentido mostrar preferred_name.

Tabla students:

first_name preferred_name
John Johnny
Anna Anna
Alex Lex

Consulta con NULLIF():

SELECT first_name,
       NULLIF(preferred_name, first_name) AS display_name
FROM students;

Resultado:

first_name display_name
John Johnny
Anna NULL
Alex Lex

Cuando preferred_name y first_name son iguales, el resultado será NULL.

Ejemplo 3: Filtrar datos

A veces necesitas seleccionar solo las filas donde los valores en dos columnas son diferentes. Por ejemplo, tenemos una tabla de pedidos con original_price y discounted_price. Queremos encontrar los pedidos donde se aplicó un descuento.

Tabla orders:

order_id original_price discounted_price
1 100 100
2 200 180
3 150 150

Consulta con NULLIF():

SELECT order_id, original_price, discounted_price
FROM orders
WHERE NULLIF(original_price, discounted_price) IS NOT NULL;

Resultado:

order_id original_price discounted_price
2 200 180

Solo los pedidos con descuento aparecen en el resultado.

Casos prácticos de uso de NULLIF()

Caso 1: Elegir un valor opcional

Cuando trabajas con datos, a veces necesitas elegir un valor de varias columnas, excluyendo los que son iguales a cierto valor. Por ejemplo, tenemos una lista de empleados con sus salarios: base_salary y bonus. Si el bonus es 0, queremos ponerlo en 999.

Tabla employees:

employee_id base_salary bonus
1 50000 10000
2 40000 0
3 60000 5000

Consulta con NULLIF():

SELECT employee_id,
       base_salary + COALESCE(NULLIF(bonus, 0), 999) AS total_salary
FROM employees;

Resultado:

employee_id total_salary
1 60000
2 40999
3 65000

Si bonus es 0, se convierte en 999.

Caso 2: Contar filas

Podemos usar NULLIF() para simplificar condiciones de filtrado complicadas. Por ejemplo, tenemos una tabla de usuarios y queremos saber en una sola consulta tanto el número total como el número de usuarios registrados (sin el estado guest).

SELECT
  COUNT(*) AS total_users,
  COUNT(NULLIF(status, 'guest')) AS registered_users
FROM users;

Así, con solo una función NULLIF() podemos resolver un montón de tareas: desde evitar errores hasta mejorar la legibilidad del código. Ahora que sabes cómo funciona, ya estás un paso más cerca de ser un crack manejando datos en PostgreSQL.

1
Cuestionario/control
Trabajo con NULL, nivel 9, lección 4
No disponible
Trabajo con NULL
Trabajo con NULL
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION