CodeGym /Cursos /SQL SELF /Checando valores NULL: IS NULL e IS NOT NULL

Checando valores NULL: IS NULL e IS NOT NULL

SQL SELF
Nível 9, Lição 1
Disponível

Hoje a gente vai continuar explorando o NULL — o herói invisível dos bancos de dados. Se tu ainda acha que NULL é só "nada", tu tá certo, mas não totalmente. Nessa aula, vamos aprender a checar se tem NULL nos nossos dados e o que fazer com isso. Bora caçar os valores que tão faltando?

Vamos começar do básico — imagina que tu tá mexendo no banco de dados de uma loja online. Tem uma tabela de pedidos, e pra alguns pedidos ninguém colocou comentário, mas pra outros tem observação. Se tu tentar buscar todos os pedidos sem observação usando comparação normal =, <>, vai se surpreender... Por quê? Porque NULL é um caso especial!

No SQL, pra checar se tem ou não NULL, a gente usa IS NULL e IS NOT NULL. Esses operadores ajudam a gente a lidar com NULL e pegar só os dados que interessam.

Checando valores com IS NULL

IS NULL serve pra ver se uma coluna ou expressão tem valor NULL.

SELECT *
FROM orders
WHERE comment IS NULL;

Essa query vai trazer todas as linhas onde o valor da coluna comment é NULL. Isso é útil se tu quiser achar pedidos sem observação.

Olha um exemplo da tabela orders:

id customer_name total_amount comment
1 Otto Art 1500 "Entrega urgente"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Query:

SELECT id, customer_name
FROM orders
WHERE comment IS NULL;

Resultado:

id customer_name
2 Maria Chi
4 Anna Song

Repara que as linhas com string vazia '' não aparecem aqui, porque '' não é NULL.

Checando valores com IS NOT NULL

IS NOT NULL faz o contrário; ele checa se o valor não é NULL. Por exemplo, se tu quiser pegar todos os pedidos que têm comentário:

SELECT *
FROM orders
WHERE comment IS NOT NULL;

Essa query só traz as linhas onde a coluna comment tem algum dado (incluindo string vazia '').

Exemplo

A tabela orders continua igual.

id customer_name total_amount comment
1 Otto Art 1500 "Entrega urgente"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Vamos rodar a query:

SELECT id, customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

Resultado:

id customer_name comment
1 Otto Art "Entrega urgente"
3 Alex Lin ''

Repara que a linha com string vazia '' tá aqui. Pro SQL, isso já conta como "não vazio".

Quando usar IS NULL e IS NOT NULL?

Olha alguns cenários:

  1. Filtrar dados: tu quer tirar registros incompletos, onde faltam valores.
  2. Tratar erro: às vezes NULL pode ser erro de digitação, e tu precisa isolar essas linhas.
  3. Analisar dados: contar quantos registros têm valores faltando ajuda a ver a qualidade dos dados.

Aplicação prática

Bora tentar uns exercícios práticos:

Exercício 1: Selecionar estudantes sem data de nascimento

Imagina que tu tem uma tabela students:

id name birth_date
1 Otto Art 2000-05-10
2 Maria Chi NULL
3 Alex Lin 1998-12-30
4 Anna Song NULL

Query:

SELECT name
FROM students
WHERE birth_date IS NULL;

Resultado:

name
Maria Chi
Anna Song

Essa query é boa pra achar estudantes que precisam ter a data de nascimento confirmada.

Exercício 2: Selecionar pedidos com comentários

id customer_name total_amount comment
1 Otto Art 1500 "Entrega urgente"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Pra tabela orders, dá pra achar os pedidos que têm comentário preenchido:

SELECT customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

Resultado:

customer_name comment
Otto Art "Entrega urgente"
Alex Lin ''

Comparando com operadores normais

Agora bora dar uma desviada e tentar uma query "errada" pra checar NULL:

SELECT *
FROM orders
WHERE comment = NULL;

Ficou surpreso? Essa query não vai trazer nenhuma linha, nem aquelas onde comment é claramente NULL. Isso porque NULL não pode ser comparado usando operadores normais. Pra esse tipo de comparação, tem que usar IS NULL mesmo.

2
Tarefa
SQL SELF, nível 9, lição 1
Bloqueado
Busca de registros com valor ausente
Busca de registros com valor ausente
2
Tarefa
SQL SELF, nível 9, lição 1
Bloqueado
Filtragem por dados disponíveis
Filtragem por dados disponíveis
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION