0Pricing
SQL Academy · Aula

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   | NULL

NULL não é zero

Um erro comum é tratar NULL como o número 0. Eles são completamente diferentes.

  • 0 é um valor conhecido: zero.
  • NULL significa 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 yet

NULL 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.
  • NULL significa 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 unknown

Ló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;      -- unknown

NULL = 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 Alice

NULL 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 INSERT que 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, SUM de um conjunto vazio retorna NULL.

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 | NULL

Evitando 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 together

Recapitulaçã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.
  • WHERE manté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

  1. O que NULL realmente significa
  2. IS NULL e IS NOT NULL
  3. COALESCE e NULLIF
  4. NULLs em agregações e junções
← Voltar para SQL Academy