CodeGym /Cursos /SQL SELF /Função NULLIF() — sintaxe e exemplos de uso

Função NULLIF() — sintaxe e exemplos de uso

SQL SELF
Nível 9 , Lição 4
Disponível

Bora trocar uma ideia sobre mais uma função pra lidar com o misterioso NULLNULLIF(). Ela salva a gente quando precisa trocar certos valores por NULL pra tratar os dados direitinho. Se prepara aí, porque essa jornada vai ser massa!

A função NULLIF() é uma baita ferramenta no PostgreSQL que deixa você comparar dois valores e retorna NULL se forem iguais, ou retorna o primeiro valor se forem diferentes. É tipo ela dizendo: "Se esses valores são iguais, esquece eles!"

Olha só a sintaxe básica da função:

NULLIF(valor1, valor2)

Se valor1 e valor2 forem iguais, o resultado vai ser NULL. Se forem diferentes, o resultado é valor1.

Exemplo:

SELECT NULLIF(10, 10); -- Resultado: NULL
SELECT NULLIF(10, 20); -- Resultado: 10
SELECT NULLIF('hello', 'hello'); -- Resultado: NULL
SELECT NULLIF('hello', 'world'); -- Resultado: 'hello'

Tranquilo, né? Agora bora ver como usar essa função em situações do dia a dia.

Exemplo 1: Evitando divisão por zero

Divisão por zero é o terror de qualquer dev. No SQL, tentar dividir por zero dá erro. É aí que NULLIF() entra em cena.

Imagina que a gente tem uma tabela sales com duas colunas: revenue (receita) e expenses (despesas). Queremos calcular a rentabilidade das despesas (revenue / expenses), mas às vezes as despesas são zero. Se rodar a query sem checar nada, vai dar erro de divisão por zero.

Tabela sales:

revenue expenses
1000 200
1500 0
2000 250

Query errada:

SELECT revenue / expenses AS profitability
FROM sales;
-- Erro: divisão por zero!

Resolvendo com NULLIF():

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

Resultado:

profitability
5.00
NULL
8.00

Agora, se expenses for 0, NULLIF(expenses, 0) retorna NULL, e dividir por NULL não dá erro, só retorna NULL mesmo.

Exemplo 2: Trocando valores iguais por NULL

Pensa que você tem uma tabela de estudantes, com as colunas first_name e preferred_name. Às vezes o estudante prefere o nome real, às vezes escolhe outro. Se os dois nomes forem iguais, não faz sentido mostrar o preferred_name.

Tabela students:

first_name preferred_name
John Johnny
Anna Anna
Alex Lex

Query com 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

Quando preferred_name e first_name são iguais, o resultado é NULL.

Exemplo 3: Filtrando dados

Às vezes você quer pegar só as linhas onde os valores de duas colunas são diferentes. Por exemplo, tem uma tabela de pedidos com original_price e discounted_price. Queremos achar só os pedidos que tiveram desconto.

Tabela orders:

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

Query com 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

Só os pedidos com desconto aparecem no resultado.

Casos práticos de uso do NULLIF()

Caso 1: Escolhendo valor opcional

Quando você tá mexendo com dados, às vezes precisa escolher um valor entre várias colunas, ignorando os que são iguais a um certo valor. Por exemplo, temos uma lista de funcionários com salários: base_salary e bonus. Se o bônus for 0, queremos colocar 999 no lugar.

Tabela employees:

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

Query com 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

Se bonus for 0, ele vira 999.

Caso 2: Contando linhas

Dá pra usar NULLIF() pra simplificar filtros mais chatos. Por exemplo, temos uma tabela de usuários e queremos numa query só saber o total de usuários e quantos são cadastrados (sem status guest).

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

Viu só? Com uma função só, NULLIF(), dá pra resolver vários problemas: evitar erro, deixar o código mais limpo e fácil de entender. Agora que você já sacou como ela funciona, tá mais perto de virar ninja em dados no PostgreSQL.

1
Pesquisa/teste
Trabalhando com NULL, nível 9, lição 4
Indisponível
Trabalhando com NULL
Trabalhando com NULL
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION