IS NULL, IS NOT NULL e COALESCE
Detecte valores NULL com IS NULL, substitua-os com COALESCE / NULLIF e crie consultas que lidem bem com dados ausentes.
IS NULL, IS NOT NULL e COALESCE é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 4 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 SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
Testando NULL
Use IS NULL e IS NOT NULL — nunca = NULL:
SELECT * FROM users WHERE deleted_at IS NULL;
SELECT * FROM users WHERE deleted_at IS NOT NULL;Por que = NULL falha silenciosamente
Comparar qualquer coisa com NULL produz NULL (desconhecido). A linha é descartada — mas você não recebe um erro, então o bug chega à produção:
SELECT * FROM users WHERE deleted_at = NULL;
-- → returns 0 rows, alwaysCOALESCE: primeiro valor não NULL
COALESCE aceita qualquer quantidade de argumentos e retorna o primeiro que não é NULL:
SELECT id,
COALESCE(nickname, full_name, email, 'Anonymous') AS display_name
FROM users;COALESCE em WHERE
Use COALESCE para transformar NULL em um valor padrão que possa ser ordenado ou comparado:
-- Treat NULL last_login_at as the epoch:
SELECT * FROM users
ORDER BY COALESCE(last_login_at, '1970-01-01') DESC;NULLIF: o inverso
NULLIF(a, b) retorna NULL quando a = b; caso contrário, retorna a:
-- Treat 0 as missing so AVG ignores it:
SELECT AVG(NULLIF(price, 0)) FROM products;
-- Convert empty string to NULL on insert:
INSERT INTO contacts (phone) VALUES (NULLIF(:phone, ''));CASE para valores padrão condicionais
CASE é a alternativa de uso geral quando COALESCE não é flexível o suficiente:
SELECT id,
CASE
WHEN status IS NULL OR status = '' THEN 'unknown'
WHEN status = 'A' THEN 'active'
ELSE status
END AS status_label
FROM users;NULL em CHECK e restrições
Uma restrição CHECK passa quando a condição é NULL. Seja explícito se precisar proibir NULL:
CREATE TABLE prices (
amount NUMERIC(10,2),
CHECK (amount > 0) -- amount = NULL passes!
);
-- Better:
CREATE TABLE prices2 (
amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);NULL em JOIN ON
Pares de linhas cuja chave de junção é NULL nunca correspondem — NULL = NULL é NULL. Use IS NOT DISTINCT FROM se quiser que NULL seja igual a NULL:
SELECT * FROM a JOIN b ON a.key IS NOT DISTINCT FROM b.key;NULLs e UNIQUE
O SQL padrão trata NULLs como distintos em restrições UNIQUE — você pode ter várias linhas com NULL:
CREATE TABLE invites (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE
);
INSERT INTO invites (email) VALUES (NULL), (NULL); -- both succeed!Recapitulação de NULLs e agregações
As agregações (exceto COUNT(*)) ignoram NULLs.
SELECT COUNT(*) FROM users; -- all rows
SELECT COUNT(email) FROM users; -- rows where email IS NOT NULL
SELECT COUNT(DISTINCT id) FROM users;Sempre declare NOT NULL quando possível
NOT NULL é a garantia de correção mais simples e mais forte. Adicione-o a toda coluna que nunca deva ficar vazia.
Recapitulação
O tratamento de NULL é a maior fonte isolada de bugs sutis em SQL.
- Faça testes com
IS NULL - Substitua com
COALESCE - Transforme marcadores em NULL com
NULLIF - Use NOT NULL por padrão
Verificação rápida
Qual expressão retorna email quando não é NULL e, caso contrário, o literal 'no-email'?
Perguntas Frequentes
A aula “IS NULL, IS NOT NULL e COALESCE” é grátis?
Sim — o texto completo de “IS NULL, IS NOT NULL e COALESCE” é 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 SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “IS NULL, IS NOT NULL e COALESCE”?
Detecte valores NULL com IS NULL, substitua-os com COALESCE / NULLIF e crie consultas que lidem bem com dados ausentes. Você pratica SQL Academy 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 SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy 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 4 de 4.
Quanto tempo leva a aula “IS NULL, IS NOT NULL e COALESCE”?
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 SQL Academy?
Sim. Cada aula de SQL Academy 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
- Padrões e caracteres curinga com LIKE
- IN e NOT IN para conjuntos
- BETWEEN para intervalos
- IS NULL, IS NOT NULL e COALESCE