Precisamos falar sobre NULL

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 > NULL implica em NULL
  • 1 = NULL implica em NULL
  • NULL = NULL implica em NULL
  • 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.

comments powered by Disqus