Chegou a hora de falar mais a fundo sobre o NULL. E não é papo furado, mesmo que nosso personagem pareça... nada. Se uma tabela fosse uma casa, o NULL seria o fantasma dela — silencioso, misterioso e imprevisível. Ele até aparece, mas não responde perguntas, não entra nas contas, foge das comparações. Não é só "vazio" — é "nada se sabe".
No mundo do SQL, NULL não é zero, não é string vazia e nem "sem dados" do jeito que a gente costuma pensar. É um sinal especial de desconhecido, e tem que tratar com cuidado. Hoje vamos entender por que NULL não é só um visitante estranho, mas um cara importante em qualquer banco de dados. Porque ele literalmente significa "valor desconhecido ou não definido".
Qual a diferença entre NULL, string vazia ou número 0?
Muita gente que tá começando confunde NULL com outros valores, tipo string vazia '' ou número 0. Bora ver as diferenças principais:
| Conceito | Valor |
|---|---|
NULL |
Total ausência de valor. Não é só uma caixa vazia, é a ausência da caixa |
| String vazia | É uma string que não tem nenhum caractere. Tipo: '' |
Número 0 |
Valor que representa o número zero mesmo |
Exemplo da vida real: imagina que você tem uma tabela de funcionários e guarda o salário deles. Se o salário for 0, quer dizer que a pessoa não recebeu nada. Mas se o salário for NULL, você simplesmente não sabe quanto ela ganha (ou ainda não foi definido).
Como interpretar o NULL
Agora que já sacamos um pouco o que é NULL, bora ver como o SQL lida com ele. O mais importante sobre NULL dá pra resumir assim: NULL não é igual a nada e nem diferente de nada, nem dele mesmo.
SELECT NULL = NULL; -- Resultado: FALSE
Surpresa! Por quê? Porque NULL é desconhecido. Se você tem dois valores desconhecidos, não dá pra afirmar que são iguais, nem que são diferentes.
Bora ver uns exemplos:
Exemplos de operações com NULL
SELECT NULL + 1; -- Resultado: NULL
SELECT NULL * 100; -- Resultado: NULL
SELECT NULL = 0; -- Resultado: FALSE
SELECT NULL <> 0; -- Resultado: FALSE
NULL em soma, multiplicação ou qualquer cálculo sempre retorna NULL. Aqui o NULL não funciona igual ao 0 na matemática. É tipo jogar algo no vazio e o vazio engole tudo.
Exemplos práticos
Imagina a tabela students com informações dos estudantes:
| id | name | birth_date | grade |
|---|---|---|---|
| 1 | Alice | 2000-01-01 | 85 |
| 2 | Bob | NULL | 90 |
| 3 | Charlie | 1999-05-22 | NULL |
| 4 | Diana | NULL | NULL |
Exemplo 1: Como o NULL afeta condições
Se a gente tentar buscar todos os estudantes sem data de nascimento usando WHERE birth_date = NULL:
SELECT *
FROM students
WHERE birth_date = NULL;
Não vai retornar nada, porque NULL = NULL dá FALSE. Pra checar NULL tem que usar IS NULL:
SELECT * FROM students WHERE birth_date IS NULL;
Resultado:
| id | name | birth_date | grade |
|---|---|---|---|
| 2 | Bob | NULL | 90 |
| 4 | Diana | NULL | NULL |
Exemplo 2: Como o NULL afeta cálculos
| id | name | birth_date | grade |
|---|---|---|---|
| 1 | Alice | 2000-01-01 | 85 |
| 2 | Bob | NULL | 90 |
| 3 | Charlie | 1999-05-22 | NULL |
| 4 | Diana | NULL | NULL |
Se a gente tentar calcular a média das notas de todos os estudantes:
SELECT AVG(grade) FROM students;
O resultado vai ser: 87.5. Por quê? Porque o NULL é ignorado nas funções agregadas tipo AVG, SUM, MIN, MAX. Mas fica ligado! Se você precisar considerar as linhas com NULL, vai ter que fazer uns ajustes extras.
Vamos estudar mais sobre como lidar com NULL nas próximas aulas.
GO TO FULL VERSION