NULL: o terceiro valor lógico
Domine o significado de NULL, por que NULL não é igual a nada (nem a si mesmo) e como a lógica de três valores afeta as cláusulas WHERE.
NULL: o terceiro valor lógico é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 3 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.
O que é NULL?
NULL representa dados desconhecidos ou ausentes. Não é zero, não é uma cadeia vazia e não é falso. É a ausência explícita de um valor.
NULL não é igual a nada (nem a si próprio)
Esta é a regra que confunde todo mundo:
SELECT NULL = NULL; -- NULL (not true!)
SELECT NULL = 0; -- NULL
SELECT NULL = ''; -- NULL
SELECT NULL <> 1; -- NULLUse IS NULL e IS NOT NULL
Para testar NULL, você precisa usar os predicados especiais IS NULL e IS NOT NULL:
SELECT email FROM users WHERE deleted_at IS NULL; -- active users
SELECT email FROM users WHERE deleted_at IS NOT NULL; -- deleted usersLógica de três valores
A lógica booleana do SQL tem THREE valores: TRUE, FALSE e UNKNOWN (NULL).
| A | B | A AND B | A OR B |
|---|---|---|---|
| TRUE | NULL | NULL | TRUE |
| FALSE | NULL | FALSE | NULL |
| NULL | NULL | NULL | NULL |
WHERE descarta linhas quando o predicado é NULL
Se WHERE x = 5 resultar em NULL para uma linha (porque x é NULL), essa linha NÃO será retornada. Somente as linhas cujo predicado é TRUE são mantidas.
-- Suppose age is NULL for some users:
SELECT * FROM users WHERE age >= 18;
-- Users with NULL age are NOT returned, even though we
-- don't actually know they're under 18.A armadilha de NULL com NOT IN
Esta consulta retorna ZERO linhas se algum nome na subconsulta for NULL:
SELECT * FROM users
WHERE name NOT IN (SELECT excluded_name FROM blocklist);
-- If blocklist has a NULL row, the whole NOT IN evaluates to NULL
-- → no rows returned
-- Safer:
SELECT * FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM blocklist b WHERE b.excluded_name = u.name
);COALESCE: substituindo NULL por um valor padrão
COALESCE retorna o primeiro argumento que não seja NULL:
SELECT id, COALESCE(full_name, email, 'Anonymous') AS display_name
FROM users;
-- If full_name is NULL, use email; if that's NULL too, use 'Anonymous'.NULLIF: o oposto
NULLIF(a, b) retorna NULL quando a = b; caso contrário, retorna a. É útil para tratar valores sentinela, como '' ou 0, como NULL.
SELECT NULLIF(price, 0) FROM products;
-- Returns NULL when price is 0, useful for AVG() that should ignore zeros.NULL em agregações
As funções de agregação (exceto COUNT(*)) ignoram entradas NULL:
-- Suppose: prices = [10, 20, NULL, 30]
SELECT COUNT(*) FROM products; -- 4 (counts rows)
SELECT COUNT(price) FROM products; -- 3 (counts non-NULL prices)
SELECT AVG(price) FROM products; -- 20 (60 / 3, not 60 / 4)
SELECT SUM(price) FROM products; -- 60Ordenação de NULL
Por padrão, o PostgreSQL ordena os valores NULL por último em ordem crescente e primeiro em ordem decrescente. Você pode substituir esse comportamento:
SELECT * FROM users ORDER BY last_login_at DESC NULLS LAST;Armazenando NULL versus uma cadeia vazia
Decida para cada coluna: '' é um valor válido? Se não for, use NULL para significar "nenhum valor". Se for, NULL significa algo diferente (por exemplo, "ainda não perguntado").
Seja consistente — não misture os dois na mesma coluna.
Recapitulação
NULL é seu próprio valor lógico.
- Teste com
IS NULL, nunca com= NULL - Os filtros WHERE mantêm apenas as linhas TRUE
- As agregações ignoram entradas NULL
COALESCEé seu aliado
Verificação rápida
O que SELECT NULL = NULL; retorna?
Perguntas Frequentes
A aula “NULL: o terceiro valor lógico” é grátis?
Sim — o texto completo de “NULL: o terceiro valor lógico” é 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 “NULL: o terceiro valor lógico”?
Domine o significado de NULL, por que NULL não é igual a nada (nem a si mesmo) e como a lógica de três valores afeta as cláusulas WHERE. 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 3 de 4.
Quanto tempo leva a aula “NULL: o terceiro valor lógico”?
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
- O que é um RDBMS e por que as tabelas são importantes
- Chaves primárias e unicidade
- NULL: o terceiro valor lógico
- Visão geral dos tipos de dados: INT VARCHAR DATE BOOLEAN