0Pricing
SQL Academy · Aula

IS NULL, IS NOT NULL e COALESCE

Detecte valores NULL com IS NULL, substitua-os com COALESCE / NULLIF e crie consultas que lidem bem com dados ausentes.

IS NULL, IS NOT NULL e COALESCE é 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.

Testando NULL

Use IS NULL e IS NOT NULL — nunca = NULL:

SELECT * FROM users WHERE deleted_at IS NULL;
SELECT * FROM users WHERE deleted_at IS NOT NULL;

Por que = NULL falha silenciosamente

Comparar qualquer coisa com NULL produz NULL (desconhecido). A linha é descartada — mas você não recebe um erro, então o bug chega à produção:

SELECT * FROM users WHERE deleted_at = NULL;
-- → returns 0 rows, always

COALESCE: primeiro valor não NULL

COALESCE aceita qualquer quantidade de argumentos e retorna o primeiro que não é NULL:

SELECT id,
       COALESCE(nickname, full_name, email, 'Anonymous') AS display_name
FROM users;

COALESCE em WHERE

Use COALESCE para transformar NULL em um valor padrão que possa ser ordenado ou comparado:

-- Treat NULL last_login_at as the epoch:
SELECT * FROM users
ORDER BY COALESCE(last_login_at, '1970-01-01') DESC;

NULLIF: o inverso

NULLIF(a, b) retorna NULL quando a = b; caso contrário, retorna a:

-- Treat 0 as missing so AVG ignores it:
SELECT AVG(NULLIF(price, 0)) FROM products;

-- Convert empty string to NULL on insert:
INSERT INTO contacts (phone) VALUES (NULLIF(:phone, ''));

CASE para valores padrão condicionais

CASE é a alternativa de uso geral quando COALESCE não é flexível o suficiente:

SELECT id,
  CASE
    WHEN status IS NULL OR status = '' THEN 'unknown'
    WHEN status = 'A' THEN 'active'
    ELSE status
  END AS status_label
FROM users;

NULL em CHECK e restrições

Uma restrição CHECK passa quando a condição é NULL. Seja explícito se precisar proibir NULL:

CREATE TABLE prices (
  amount NUMERIC(10,2),
  CHECK (amount > 0)        -- amount = NULL passes!
);

-- Better:
CREATE TABLE prices2 (
  amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);

NULL em JOIN ON

Pares de linhas cuja chave de junção é NULL nunca correspondem — NULL = NULL é NULL. Use IS NOT DISTINCT FROM se quiser que NULL seja igual a NULL:

SELECT * FROM a JOIN b ON a.key IS NOT DISTINCT FROM b.key;

NULLs e UNIQUE

O SQL padrão trata NULLs como distintos em restrições UNIQUE — você pode ter várias linhas com NULL:

CREATE TABLE invites (
  id BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) UNIQUE
);
INSERT INTO invites (email) VALUES (NULL), (NULL); -- both succeed!

Recapitulação de NULLs e agregações

As agregações (exceto COUNT(*)) ignoram NULLs.

SELECT COUNT(*)            FROM users;  -- all rows
SELECT COUNT(email)        FROM users;  -- rows where email IS NOT NULL
SELECT COUNT(DISTINCT id)  FROM users;

Sempre declare NOT NULL quando possível

NOT NULL é a garantia de correção mais simples e mais forte. Adicione-o a toda coluna que nunca deva ficar vazia.

Recapitulação

O tratamento de NULL é a maior fonte isolada de bugs sutis em SQL.

  • Faça testes com IS NULL
  • Substitua com COALESCE
  • Transforme marcadores em NULL com NULLIF
  • Use NOT NULL por padrão

Verificação rápida

Qual expressão retorna email quando não é NULL e, caso contrário, o literal 'no-email'?

Perguntas Frequentes

A aula “IS NULL, IS NOT NULL e COALESCE” é grátis?

Sim — o texto completo de “IS NULL, IS NOT NULL e COALESCE” é 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 “IS NULL, IS NOT NULL e COALESCE”?

Detecte valores NULL com IS NULL, substitua-os com COALESCE / NULLIF e crie consultas que lidem bem com dados ausentes. 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 “IS NULL, IS NOT NULL e COALESCE”?

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. Padrões e caracteres curinga com LIKE
  2. IN e NOT IN para conjuntos
  3. BETWEEN para intervalos
  4. IS NULL, IS NOT NULL e COALESCE
← Voltar para SQL Academy