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:
- Filtrar dados: tu quer tirar registros incompletos, onde faltam valores.
- Tratar erro: às vezes
NULLpode ser erro de digitação, e tu precisa isolar essas linhas. - 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.
GO TO FULL VERSION