0Pricing
SQL Academy · Aula

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.33

Tabela 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 orders

SUM 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 orders

FILTER 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

  1. COUNT, SUM, AVG, MIN, MAX
  2. GROUP BY com uma ou várias colunas
  3. HAVING em comparação com WHERE
  4. Armadilhas comuns: valores NULL em agregações
← Voltar para SQL Academy