Entendendo NULL

 

Algumas pessoas erroneamente tendem a pensar que NULL é zero ou vazio. Em fato, NULL não é nenhum destes. NULL é literalmente um valor desconhecido ou indeterminado.

O efeito desta natureza indeterminada de um valor NULL é que ele não pode ser usado em cálculos ou em Comparação.

A lista abaixo, contém algumas regras importantes a serem lembradas sobre o comportamento de valores NULL.

  • Um valor NULL não pode ser atribuído a uma coluna definida como NOT NULL
  • Valores NULL não são iguais. ?? um erro freqüente comparar duas colunas que contém NULL e esperar que os valores sejam iguais.
    (Uma coluna NULL pode ser identificada em cláusulas WHERE ou em expressão boleana usando frases como “value IS NULL” e “value IS NOT NULL”.)
  • Uma coluna contendo valor NULL é ignorada em cálculos de valores agregados como AVG, SUM ou MAX.
  • Quando colunas contendo valor NULL em uma condição GROUP BY de uma consulta, o resultado irá conter linhas para estes valores NULL.
  • JOIN entre tabelas, em que uma condição JOIN contém valores e outro contém NULL, são controlados pelas regras de “OUTER JOIN”.

Referências

 
 
 

3 Comments

 
  1. O curioso é que, embora o null não possa ser comparado, pois é um valor indeterminado, o SQL Server compara o null numa unique constraint. Com isso, não é possível, por exemplo, inserir dois valores null numa coluna que tenha unique constraint.

  2. Engraçado o SQL Server fazer isso, o PostgreSQL deixa eu ter quantos nulos forem necessários em um campo indexado por uma unique constraint.

  3. Cesar disse:

    Alexandre, é uma limitação muito chata do SQL Server, eu estou convertendo um sistema de Firebird pra SQL Server, e dei de cara com isto, e só achava que tinha feito algo errado, mas depois vi que era limitação do SQL Server.

 

Leave a Comment

 




XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>