← Voltar para os artigos

Por que = NULL nunca funciona no SQL (e o que usar no lugar)

Por Fernando Nagao Douverny · 22 de junho de 2026 · 2 min de leitura

fundamentosiniciantearmadilhas

Você escreve isso, roda, e não vem nada:

SELECT nome
FROM clientes
WHERE telefone = NULL

Os dados estão lá. Tem cliente sem telefone. Mas a query devolve zero linhas. Por quê?

NULL não é um valor. É a ausência de valor.

No SQL, NULL significa “desconhecido”. E você não consegue comparar nada com “desconhecido” usando =.

Pensa assim: se eu te pergunto “a idade do João é igual à idade da Maria?” e você não sabe nenhuma das duas, a resposta não é “sim” nem “não” — é “não dá pra saber”.

O SQL trata isso do mesmo jeito. Qualquer comparação com NULL usando = não retorna nem verdadeiro nem falso: retorna NULL (desconhecido). E o WHERE só deixa passar o que é verdadeiro. Resultado: nada passa.

-- tudo isso retorna NULL, nunca TRUE:
telefone = NULL
telefone <> NULL
NULL = NULL

Sim — até NULL = NULL é “desconhecido”. Dois valores desconhecidos não são, necessariamente, iguais.

O jeito certo: IS NULL e IS NOT NULL

Pra testar ausência de valor, existe um operador próprio:

SELECT nome
FROM clientes
WHERE telefone IS NULL

E pra pegar quem tem telefone:

SELECT nome
FROM clientes
WHERE telefone IS NOT NULL

Onde isso te morde de verdade

Esse erro raramente quebra a query — ela roda, não dá aviso, só devolve um número errado. Em análise de clientes inativos, de churn, de cadastros incompletos, um = NULL esquecido faz você concluir que “não tem nenhum caso” quando, na verdade, a query está silenciosamente errada.

Pra lembrar

  • = NULL e <> NULL nunca retornam verdadeiro.
  • Use IS NULL / IS NOT NULL pra testar ausência de valor.
  • Desconfie sempre que uma query “deveria ter retorno” e veio vazia.

Pegue o ebook grátis: SQL é português

9 palavras de SQL que respondem 80% das perguntas de negócio. Direto no seu e-mail.

Sem spam. Só conteúdo de SQL e dados.