NULL ou não NULL, eis a questão!

Por Luiz Paulo de Oliveira Santos

Data de Publicação: 26 de Setembro de 2006

Esse assunto é muito polêmico, principalmente porque ele é uma excessão à regra. Mas de qualquer forma, vamos ao que interessa.

NULL ao contrário do que muita gente pensa, não é um conteúdo, mas sim um estado que o campo (ou variável em algumas linguagens) se encontra. O fato dele estar NULL indica que não possui conteúdo de nenhuma espécie.

Excepcionalmente algumas linguagens de programação permitem comparar NULL com dois apóstrofes ou duas aspas (para campos alfanuméricos) ou com zero (em caso de campos numéricos) pois a própria linguagem ao receber NULL trata as comparações. Mas bancos de dados não tratam valores para o NULL.

Uma vez que NULL não é conteúdo e sim estado, não podemos fazer calculos nem concatenações com campos vazios, para isso devemos testar se o campo é NULL, e caso seja, devemos retornar um valor real, por exemplo:

A função COALESCE( <campo a testar>, <valor padrão a retornar> ), observe a seguir:

  SELECT NOME, COALESCE( SALBRUTO, 0 ) * 1.10 FROM PESSOAS

No caso acima utilizamos a funcão COALESCE que retorna o valor 0 (zero) caso o campo SALBRUTO esteja NULL, caso SALBRUTO não esteja NULL retorna o próprio SALBRUTO.

Mas COALESCE não é a unica função que trata o NULL. Alias temos uma que pode nos devolver NULL. O nome da função é NULLIF que compara dois conteúdos e se forem iguais devolve NULL, caso sejam diferentes retornam o primeiro valor, por exemplo:

  SELECT NULLIF( SALBRUTO, SALLIQUIDO )

Após verificarmos como substituir e como conseguir um NULL, podemos deduzir que o NULL também importante para algumas situações, como por exemplo uma base de dados onde será armazenada a nota de alunos. Caso um aluno que tenha faltado a uma prova, não devemos atribuir nota zero para o aluno porque ele não fez a prova, ou seja, não existe a nota, e é diferente do zero que algum outro aluno possa ter tirado.

Então o NULL é uma realidade, uma possibilidade que deve ser tratada, porque há situações que necessitamos utilizar o NULL.

Um forte abraço e até a próxima.