Armadilhas comuns: valores NULL em agregações
Evite as armadilhas clássicas de NULL: AVG ignora valores NULL, COUNT(coluna) ignora valores NULL e podem ocorrer surpresas ao agrupar por colunas que aceitam NULL.
Armadilhas comuns: valores NULL em agregações é 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.
Agregações ignoram NULL
Toda agregação, exceto COUNT(*), ignora entradas NULL. Às vezes isso é exatamente o que você quer — e às vezes é um erro.
Armadilha clássica: COUNT(*) versus COUNT(col)
Os resultados são diferentes quando a coluna contém NULL:
SELECT COUNT(*) FROM users; -- 1000
SELECT COUNT(email) FROM users; -- 950 (50 users have NULL email)Erro: AVG não considera NULL como zero
Avaliações [5, 5, NULL] → AVG = 5, e não (5+5+0)/3 = 3,33. Decida se esse é o comportamento desejado.
SELECT AVG(rating) FROM reviews; -- 5
SELECT AVG(COALESCE(rating, 0)) FROM reviews; -- 3.33Tabela vazia = agregação NULL
Se nenhuma linha corresponder, SUM/AVG/MIN/MAX retornam NULL, não 0. Trate isso com COALESCE:
SELECT COALESCE(SUM(total), 0) AS revenue
FROM orders
WHERE user_id = 999999; -- safe even when user has no ordersSUM de uma coluna NULL
Se o valor de todas as linhas for NULL, SUM retornará NULL — não 0. É a mesma armadilha.
GROUP BY com chave de agrupamento NULL
NULL forma seu próprio grupo:
SELECT country, COUNT(*) FROM users
GROUP BY country;
-- → ('US', 100), ('CA', 30), (NULL, 5)Contagem de distintos com NULL
COUNT(DISTINCT col) ignora NULL:
INSERT INTO t (c) VALUES (1),(2),(NULL),(NULL),(2);
SELECT COUNT(DISTINCT c) FROM t; -- 2 (NULL not counted)DISTINCT em várias colunas
Uma tupla que contém NULL ainda é distinta de outra com as mesmas colunas não NULL:
SELECT COUNT(*) FROM (
SELECT DISTINCT a, b FROM t
) sub;Cuidado com junções implícitas a tabelas opcionais
Um LEFT JOIN pode introduzir NULL que alteram sua agregação. Decida se essas linhas devem ser contadas ou filtradas:
SELECT u.id, COUNT(o.id) AS orders
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id; -- COUNT(o.id) gives 0 for users with no ordersFILTER para contagens condicionais
FILTER é mais claro do que CASE dentro de SUM:
SELECT COUNT(*) FILTER (WHERE status = 'paid') AS paid_count,
COUNT(*) FILTER (WHERE status = 'refunded') AS refund_count
FROM orders;Sempre teste agregações com NULL
Ao adicionar uma nova consulta de agregação, execute-a com uma amostra que inclua NULL. O erro quase nunca aparece em dados de teste limpos.
Recapitulação
NULL + agregação é o erro mais comum em SQL.
- Agregações ignoram NULL, exceto COUNT(*)
- Resultado vazio → NULL, não 0
- Envolva com COALESCE quando 0 for o desejado
- Tenha cuidado com agregações de LEFT JOIN
Verificação rápida
Reviews tem as avaliações [5, 5, NULL, 1]. O que AVG(rating) retorna?
Perguntas Frequentes
A aula “Armadilhas comuns: valores NULL em agregações” é grátis?
Sim — o texto completo de “Armadilhas comuns: valores NULL em agregações” é 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 “Armadilhas comuns: valores NULL em agregações”?
Evite as armadilhas clássicas de NULL: AVG ignora valores NULL, COUNT(coluna) ignora valores NULL e podem ocorrer surpresas ao agrupar por colunas que aceitam NULL. 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 “Armadilhas comuns: valores NULL em agregações”?
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
- COUNT, SUM, AVG, MIN, MAX
- GROUP BY com uma ou várias colunas
- HAVING em comparação com WHERE
- Armadilhas comuns: valores NULL em agregações