COALESCE, NULLIF e ISNULL
Substitua valores padrão e entenda a diferença entre COALESCE e funções específicas de cada fornecedor.
COALESCE, NULLIF e ISNULL é uma aula grátis de Coding Interview Prep no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Coding Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Coding Interview Prep inclui 4 aulas no total.
Substituição de valores para NULL
Agora que você sabe detectar NULL, a próxima habilidade importante em entrevistas é substituí-lo por um valor padrão apropriado. A ferramenta padrão e portável para isso é COALESCE.
Além dele, você conhecerá NULLIF, que segue na direção oposta ao transformar um valor específico em NULL, e as funções específicas de cada fornecedor ISNULL (SQL Server) e IFNULL (MySQL), que os candidatos frequentemente confundem com COALESCE.
Saber exatamente como cada uma difere, especialmente quanto ao número de argumentos e ao tipo de retorno, é uma pergunta frequente em entrevistas.
Fundamentos de COALESCE
COALESCE aceita qualquer número de argumentos e retorna o primeiro que não é NULL, examinando-os da esquerda para a direita. Se todos os argumentos forem NULL, ele retornará NULL.
Ele é um padrão ANSI e funciona em todos os principais bancos de dados, por isso deve ser sua resposta padrão. Use-o para fornecer alternativas na exibição, no cálculo ou no agrupamento.
-- Show 0 instead of NULL for missing bonuses
SELECT name, COALESCE(bonus, 0) AS bonus
FROM employees;
-- Multiple fallbacks, first non-NULL wins
SELECT COALESCE(mobile_phone, home_phone, 'no phone') AS contact
FROM customers;COALESCE usa avaliação de curto-circuito
Uma sutileza que os entrevistadores costumam explorar: conceitualmente, COALESCE avalia os argumentos da esquerda para a direita e para no primeiro que não é NULL. Assim, uma expressão posterior e dispendiosa não será necessária quando uma anterior já tiver produzido um resultado.
Na prática, os otimizadores ainda poderão avaliar expressões antecipadamente em alguns mecanismos; portanto, não dependa disso para evitar erros como divisão por zero. Porém, a precedência da esquerda para a direita, que determina qual valor prevalece, é garantida.
-- Prefer the manual override, else the computed value,
-- else a constant default
SELECT COALESCE(manual_price, list_price * 1.1, 9.99) AS price
FROM products;COALESCE e o tipo de dados do resultado
Uma armadilha sutil: o tipo de dados do resultado de COALESCE é determinado pela precedência de tipos de todos os seus argumentos em conjunto, não apenas pelo primeiro. Misturar tipos incompatíveis pode causar erros ou truncamento inesperado.
Por exemplo, aplicar COALESCE a uma coluna inteira e a um valor padrão de texto poderá falhar ou provocar uma conversão implícita, dependendo do mecanismo. Os entrevistadores usam isso para verificar se você leva os tipos em consideração.
-- Risky: integer column with a string fallback
-- may error or force a cast depending on dialect
SELECT COALESCE(score, 'N/A') FROM tests;
-- Safer: keep the fallback type-compatible, or cast explicitly
SELECT COALESCE(CAST(score AS VARCHAR), 'N/A') FROM tests;ISNULL (SQL Server) versus COALESCE
O SQL Server tem ISNULL(expr, replacement). A função se parece com COALESCE, mas difere em aspectos importantes que os entrevistadores adoram comparar:
- Número de argumentos: ISNULL aceita exatamente dois; COALESCE aceita vários.
- Tipo de retorno: ISNULL usa o tipo do primeiro argumento, o que pode truncar o valor de substituição. COALESCE usa a precedência combinada de tipos.
- Portabilidade: ISNULL existe apenas no SQL Server; COALESCE é um padrão ANSI.
Recomendação para declarar em voz alta: prefira COALESCE pela portabilidade e pela tipagem previsível.
-- SQL Server: ISNULL may truncate the replacement to
-- the first argument's type (e.g. CHAR(1))
SELECT ISNULL(code, 'UNKNOWN') FROM items;
-- If code is CHAR(1), 'UNKNOWN' becomes 'U'
-- COALESCE picks the wider type and keeps 'UNKNOWN'
SELECT COALESCE(code, 'UNKNOWN') FROM items;IFNULL e NVL
Outros dialetos têm seus próprios atalhos com dois argumentos:
- MySQL / SQLite:
IFNULL(expr, replacement) - Oracle:
NVL(expr, replacement), além deNVL2para uma variação de condição e alternativa
As três funções se comportam como um COALESCE com dois argumentos. Se a pergunta for especificamente sobre a forma idiomática do MySQL ou do Oracle, mencione-as; caso contrário, use COALESCE.
-- MySQL
SELECT IFNULL(bonus, 0) FROM employees;
-- Oracle
SELECT NVL(bonus, 0) FROM employees;
-- NVL2(bonus, 'has bonus', 'no bonus') -> if/else on NULLNULLIF: a direção oposta
NULLIF(a, b) retorna NULL quando a = b; caso contrário, retorna a. Ela cria deliberadamente um NULL, o que é o oposto de COALESCE.
Seu uso mais conhecido é evitar a divisão por zero. Envolva o denominador em NULLIF(denominator, 0): se ele for zero, o divisor se tornará NULL e a divisão inteira retornará NULL em vez de lançar um erro.
-- Avoid divide-by-zero: returns NULL instead of erroring
SELECT revenue / NULLIF(orders, 0) AS avg_order_value
FROM daily_stats;
-- NULLIF(5, 5) -> NULL
-- NULLIF(5, 3) -> 5Combinando NULLIF e COALESCE
As duas funções combinam perfeitamente. Uma frase clássica de uma linha para entrevistas é “divisão segura que exibe 0 quando não há pedidos”. Use NULLIF para evitar o erro e depois COALESCE para substituir o NULL resultante.
Essa forma compacta demonstra domínio: você trata o caso extremo e a apresentação em uma única expressão.
SELECT
COALESCE(revenue / NULLIF(orders, 0), 0) AS avg_order_value
FROM daily_stats;
-- orders = 0 -> NULLIF gives NULL -> division gives NULL
-- -> COALESCE turns it into 0Tratando cadeias vazias como NULL
Outro uso prático de NULLIF é transformar cadeias vazias em NULL para que possam ser tratadas uniformemente por COALESCE. Dados inconsistentes frequentemente misturam NULL e ''; isso normaliza os dois casos.
Leia o padrão assim: “se o valor estiver vazio, transforme-o em NULL e depois use um valor padrão”. É uma resposta clara e portável à pergunta “como você trata valores em branco e ausentes da mesma forma?”.
-- Treat both '' and NULL as missing, default to 'Anonymous'
SELECT COALESCE(NULLIF(TRIM(username), ''), 'Anonymous')
FROM users;Combinando valores após um JOIN
Após um LEFT JOIN, as linhas sem correspondência produzem valores NULL no lado direito. COALESCE transforma esses valores em padrões significativos na saída, uma necessidade muito comum em relatórios.
Aqui, os clientes sem pedidos continuam aparecendo (graças ao LEFT JOIN), e o total deles é exibido como 0 em vez de NULL. Mencionar que COALESCE é aplicado depois do JOIN, e não dentro dele, demonstra que você entende a ordem de avaliação.
SELECT
c.name,
COALESCE(SUM(o.amount), 0) AS total_spent
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Customers with no orders get 0 instead of NULLPontos para abordar na entrevista
Resumo do conjunto de ferramentas para substituição:
- COALESCE(a, b, ...): primeiro valor que não é NULL, aceita vários argumentos, é um padrão ANSI e determina o tipo pela precedência. É a escolha padrão.
- ISNULL / IFNULL / NVL: atalhos de dois argumentos específicos de cada fornecedor; ISNULL pode truncar o resultado para o tipo do primeiro argumento.
- NULLIF(a, b): retorna NULL quando os valores são iguais; é excelente para evitar divisão por zero e normalizar valores em branco.
- Combine
COALESCE(x / NULLIF(y, 0), 0)para obter uma divisão segura e adequada para apresentação.
Comece por COALESCE e mencione as variantes dos fornecedores apenas quando o dialeto estiver definido.
Verificação rápida
Escolha a expressão de divisão segura.
Recapitulação
Agora você sabe substituir e gerar valores NULL:
- COALESCE retorna o primeiro valor não NULL entre vários argumentos; é a opção padrão e portável.
- ISNULL (SQL Server), IFNULL (MySQL) e NVL (Oracle) são atalhos com dois argumentos; ISNULL pode truncar o resultado para o tipo do primeiro argumento.
- NULLIF(a, b) retorna NULL quando os dois valores são iguais, sendo ideal para evitar divisão por zero e normalizar cadeias vazias.
- Combine essas funções para obter expressões seguras e adequadas para apresentação e para substituir valores NULL após um LEFT JOIN.
Lição final: como NULL se comporta em agregações, JOINs e DISTINCT.
Perguntas Frequentes
A aula “COALESCE, NULLIF e ISNULL” é grátis?
Sim — o texto completo de “COALESCE, NULLIF e ISNULL” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Coding Interview Prep, atualize para CoddyKit PRO. O curso de Coding Interview Prep inclui 4 aulas no total.
O que vou aprender em “COALESCE, NULLIF e ISNULL”?
Substitua valores padrão e entenda a diferença entre COALESCE e funções específicas de cada fornecedor. Você pratica Coding Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Coding Interview Prep?
Nenhuma experiência prévia é necessária. Coding Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “COALESCE, NULLIF e ISNULL”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Coding Interview Prep?
Sim. Cada aula de Coding Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Lógica de três valores e UNKNOWN
- IS NULL, IS NOT NULL e igualdade segura para NULL
- COALESCE, NULLIF e ISNULL
- NULLs em agregações, junções e DISTINCT