Controverso, polêmico, misterioso. Vamos falar sobre ele, aquele que
não deve ser mencionado… precisamos falar sobre NULL.
Quando se trata de recuperar os registros de uma tabela, um método bastante comum é fazer isso filtrando registros, deixando de fora aqueles que não nos interessam e retornando apenas aqueles que serão úteis para nós (pelo menos deveria ser assim). Para que o banco saiba se um registro é de nosso iteresse ou não ele precisa ter certeza entre o que buscamos e o que está armazenado e para que o banco tenha essa certeza o dado precisa estar disponível.
É onde chegamos ao NULL, que para um banco de dados pode significar
“desconhecido” ou “não se aplica” e é por isso que comparações
envolvendo NULL não podem retornar verdade, sendo assim:
1 > NULLimplica emNULL1 = NULLimplica emNULLNULL = NULLimplica emNULL- e por ai vai…
Mas porque não retorna false ou true? Pois bem, retornar true ou
false implicaria em ter certeza qual o valor de NULL, neste caso
ele deixaria de ser desconhecido certo? É isto, 1 = NULL é NULL
porque não da para saber se o valor desconhecido é 1 ou não.
Estas e outras “curiosidadades” estou compilando numa apresentação que espero ter a chance de apresentá-la em alguns eventos este ano.
ATUALIZADO: Esta e outras curiosidades foram compiladas em uma palestra apresentada no PGBR2015.