← Voltar para os artigos

COALESCE: como tratar o NULL sem fingir que ele é zero

Por Fernando Nagao Douverny · 18 de julho de 2026 · 2 min de leitura

iniciantearmadilhas

Você soma uma coluna, o total vem menor do que deveria. Ou pior: uma conta inteira volta como NULL, sem erro nenhum.

Quase sempre é a mesma causa. NULL não é zero — é desconhecido. E desconhecido contamina tudo que encosta nele.

O NULL contamina a conta

SELECT 100 + NULL   -- resultado: NULL

Não é 100. Faz sentido: se você não sabe quanto vale a segunda parcela, não sabe o total. Qualquer operação aritmética com NULL devolve NULL.

O mesmo vale para concatenar texto, e é aí que aparece o clássico do relatório com o campo inteiro em branco:

SELECT nome || ' - ' || apelido AS identificacao
FROM clientes

Um cliente sem apelido não fica “João - ”. Fica NULL, e o nome some também.

O que o COALESCE faz

COALESCE recebe vários valores e devolve o primeiro que não for NULL:

SELECT COALESCE(apelido, nome, 'sem cadastro') AS exibicao
FROM clientes

Tem apelido? Usa o apelido. Não tem? Cai para o nome. Não tem nenhum dos dois? 'sem cadastro'.

Aplicado no problema de cima:

SELECT nome || ' - ' || COALESCE(apelido, 'sem apelido') AS identificacao
FROM clientes

O cuidado que quase ninguém toma

Trocar NULL por zero muda o número — e nem sempre você quer isso.

Repare na diferença:

SELECT AVG(nota) FROM avaliacoes                 -- ignora os NULL
SELECT AVG(COALESCE(nota, 0)) FROM avaliacoes    -- conta os NULL como nota zero

A primeira responde “a média de quem avaliou”. A segunda responde “a média tratando quem não avaliou como nota zero” — o que despenca a média e provavelmente não é o que o negócio quis perguntar.

Não é que uma esteja errada. São perguntas diferentes, e é você quem escolhe qual está respondendo.

Pra lembrar

Antes de sair colocando COALESCE(x, 0) em tudo, responda: “não tem valor” é a mesma coisa que “vale zero”?

  • Cliente sem pedido no mês → faturou zero. COALESCE para zero está certo.
  • Cliente que não respondeu a pesquisa → não deu nota zero. Aí o certo é deixar NULL e ignorar.

NULL é ausência de informação. Zero é uma informação. Confundir os dois é como o número errado entra silenciosamente no relatório.