
Como a SQL lida com valores NULL
Durante meus estudos direcionado para questões de projeto e implementação de banco de dados, encontrei algo bastante interessante e que seria legal compartilhar. A SQL tem diversas regras e abordagem para lidar com valores NULL e que se dividem da seguinte forma:
- Valor desconhecido (existe, mas não é conhecido);
A data de nascimento de uma pessoa não é conhecida, e por isso é representada por NULL no banco de dados. - Valor não disponível (existe, mas é propositalmente retido);
Uma pessoa tem um telefone residencial, mas não deseja que ele seja listado, por isso ele é retido e representado como NULL no banco de dados. - Valor não aplicável (o atributo é indefinido para essa tupla)
Um atributo Conjuge seria NULL para uma pessoa que não fosse casada, pois ele não se aplica a essa pessoa.
Em resumo, cada valor NULL na sua forma atômica é considerado diferente de qualquer outro valor NULL nos diversos registros do banco de dados. Ou seja, nos sistemas de gerenciamento de banco de dados (SGBD) baseados na SQL, o resultado do operação NULL = NULL não resulta em TRUE e nem e FALSE. Quando temos uma operação envolvendo valores nulos, a SQL vai retornar UNKNOWN ou TRUE ou FALSE.
Como fazemos para comparar valores nulos na SQL?
Vamos começar analisando a seguinte tabela de usuario.

A SQL permite consultas que verificam se o valor de um atributo é NULL. Em vez de usar os operadores = ou <> para efetuar as comparações dos valores de atributos com NULL, a SQL tem seus operadores específicos para este propósito que são IS ou IS NOT. Agora, como podemos utilizar esses operadores? Veja no exemplo abaixo a execução do seguinte comando: selecione o nome das pessoas que a coluna "BIRTH_DATE" possui valores NULL.
1-- QUERY EM SQL
2SELECT FIRSTNAME, LASTNAME
3FROM usuario
4WHERE BIRTH_DATE IS NULL;
5
6-- RESULTADO
7 -------------------------------
8--| FIRSTNAME | LASTNAME |
9-------------------------------
10--| Anderson | Silva |
11-------------------------------
12--| Antônio | Marcos |De modo similar, podemos exemplificar como o operador IS NOT funciona.
1-- QUERY EM SQL
2SELECT FIRSTNAME, LASTNAME
3FROM usuario
4WHERE BIRTH_DATE IS NOT NULL;
5
6-- RESULTADO
7 -------------------------------
8--| FIRSTNAME | LASTNAME |
9-------------------------------
10--| Francisco | Pedro |
11-------------------------------Conclusão
Devemos usar os operadores IS e IS NOT para efetuar comparação de atributos com valores NULL, porque a SQL considera cada valor NULL sendo distinto de cada outro valor NULL, de modo que a comparação de igualdade não é apropriada. Portanto, é muito importante conhecer os fundamentos das tecnologias que estamos utilizando em nossos projetos, para poder ter um real controle do que elas estão fazendo.