O que NULL realmente significa
Desconhecido, não zero e não vazio.
O que NULL realmente significa é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 1 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.
Conheça NULL
NULL é a forma de o SQL dizer "não sei". Ele não é zero, não é uma cadeia de caracteres vazia e não é false — representa a ausência de um valor.
Sempre que uma coluna não tiver um valor conhecido, o banco de dados armazenará NULL nela. Aprender como NULL se comporta é uma das etapas mais importantes para escrever consultas corretas.
-- A customers table where some phone numbers are unknown
SELECT id, name, phone
FROM customers;
-- id | name | phone
-- ---+---------+------------
-- 1 | Alice | 555-0101
-- 2 | Bob | NULL <- phone unknown
-- 3 | Carol | NULLNULL não é zero
Um erro comum é tratar NULL como o número 0. Eles são completamente diferentes.
0é um valor conhecido: zero.NULLsignifica que o valor está ausente ou é desconhecido.
Se o saldo de uma conta for 0, o cliente não tem dinheiro. Se for NULL, simplesmente ainda não sabemos qual é o saldo.
SELECT id, balance
FROM accounts;
-- id | balance
-- ---+--------
-- 1 | 0 <- known: empty wallet
-- 2 | NULL <- unknown: not recorded yetNULL não é uma cadeia de caracteres vazia
Para colunas de texto, NULL e a cadeia de caracteres vazia '' também são diferentes.
''é uma cadeia de caracteres de comprimento zero — um valor conhecido e presente.NULLsignifica que nenhuma cadeia de caracteres foi fornecida.
Você pode armazenar uma anotação vazia de propósito ou deixá-la totalmente ausente. O SQL diferencia essas situações.
SELECT id, note, length(note) AS note_len
FROM tickets;
-- id | note | note_len
-- ---+------+----------
-- 1 | '' | 0 <- empty but present
-- 2 | NULL | NULL <- absent; length is also unknownLógica de três valores
A lógica normal tem dois resultados: true e false. O SQL acrescenta um terceiro: desconhecido.
Qualquer comparação que envolva NULL produz unknown, porque não é possível comparar algo com um valor que você não tem. Isso é chamado de lógica de três valores.
-- Each comparison with NULL returns UNKNOWN, not true/false
SELECT
NULL = 5 AS eq, -- unknown
NULL <> 5 AS neq, -- unknown
NULL = NULL AS self_eq, -- unknown (!)
NULL > 0 AS gt; -- unknownNULL = NULL não é verdadeiro
A regra mais surpreendente é: NULL = NULL não é true. Essa expressão é avaliada como unknown.
Por quê? Se dois valores são desconhecidos, não é possível afirmar que são iguais — eles podem ser quaisquer coisas. Para verificar se algo é NULL, você deve usar IS NULL em vez de =.
-- Wrong: never returns rows, because NULL = NULL is unknown
SELECT * FROM customers WHERE phone = NULL;
-- Right: use IS NULL
SELECT * FROM customers WHERE phone IS NULL;WHERE mantém apenas TRUE
Uma cláusula WHERE mantém uma linha somente quando sua condição é verdadeira. As linhas cuja condição é false ou unknown são descartadas.
É por isso que filtrar uma coluna NULL com = remove silenciosamente linhas que você talvez esperasse ver.
-- Bob and Carol have NULL phones, so phone = '555-0101'
-- is UNKNOWN for them and they are excluded.
SELECT name
FROM customers
WHERE phone = '555-0101';
-- Returns only AliceNULL se propaga pela aritmética
NULL é contagioso nas expressões. Quase toda operação aritmética ou de texto que envolva NULL produz NULL.
Se você não conhece uma das entradas, também não pode conhecer o resultado.
SELECT
10 + NULL AS sum, -- NULL
100 * NULL AS prod, -- NULL
NULL / 2 AS div, -- NULL
'Hi ' || NULL AS greet; -- NULL (string concat)De onde vêm os valores NULL
Os valores NULL aparecem em várias situações comuns:
- Um
INSERTque omite uma coluna que aceita NULL. - Uma junção externa sem uma linha correspondente em um dos lados.
- Uma agregação sobre zero linhas, por exemplo,
SUMde um conjunto vazio retornaNULL.
Saber a origem ajuda você a decidir como tratá-los.
-- Omitting phone inserts NULL automatically
INSERT INTO customers (id, name) VALUES (4, 'Dan');
SELECT id, name, phone FROM customers WHERE id = 4;
-- 4 | Dan | NULLEvitando NULL: NOT NULL
Se uma coluna deve sempre ter um valor, declare-a como NOT NULL. Assim, o banco de dados rejeita qualquer linha que tente deixá-la vazia.
Essa é uma forma poderosa de manter seus dados limpos e evitar surpresas com NULL mais tarde.
CREATE TABLE users (
id integer PRIMARY KEY,
email text NOT NULL, -- must always be provided
bio text -- nullable: optional
);
-- This fails: email cannot be NULL
INSERT INTO users (id, bio) VALUES (1, 'hi');NULL e DISTINCT / GROUP BY
Há um caso em que o SQL trata os valores NULL como iguais: no agrupamento e na remoção de duplicatas.
Em DISTINCT e GROUP BY, todos os valores NULL são reunidos em um único grupo, embora NULL = NULL seja desconhecido em outros contextos. Esse caso especial mantém o agrupamento útil.
SELECT phone, count(*)
FROM customers
GROUP BY phone;
-- phone | count
-- ---------+------
-- 555-0101 | 1
-- NULL | 2 <- all NULLs grouped togetherRecapitulação do modelo mental
Tenha estas regras em mente sempre que encontrar um valor NULL:
- NULL significa desconhecido, não zero nem vazio.
- Comparações com NULL produzem desconhecido — use
IS NULL/IS NOT NULL. WHEREmantém apenas as linhas verdadeiras.- A aritmética com NULL produz NULL.
- O agrupamento trata os valores NULL como um único grupo.
-- The two correct NULL tests
SELECT name FROM customers WHERE phone IS NULL;
SELECT name FROM customers WHERE phone IS NOT NULL;Verificação rápida
Para que valor a expressão NULL = NULL é avaliada no SQL padrão?
Recapitulação
Agora você entende o que NULL realmente é: um marcador de valor ausente ou desconhecido, diferente de 0 e ''.
Você viu a lógica de três valores do SQL, por que = NULL nunca funciona, como NULL se propaga pela aritmética e como WHERE descarta linhas desconhecidas. Em seguida, você aprenderá a maneira correta de verificar valores NULL com IS NULL e IS NOT NULL.
-- Remember the golden rule
SELECT * FROM customers WHERE phone IS NULL; -- correct
-- SELECT * FROM customers WHERE phone = NULL; -- always empty!Perguntas Frequentes
A aula “O que NULL realmente significa” é grátis?
Sim — o texto completo de “O que NULL realmente significa” é 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 “O que NULL realmente significa”?
Desconhecido, não zero e não vazio. 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 1 de 4.
Quanto tempo leva a aula “O que NULL realmente significa”?
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 NULL realmente significa
- IS NULL e IS NOT NULL
- COALESCE e NULLIF
- NULLs em agregações e junções