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

novembro 28th, 2008 at 11:33
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.
novembro 28th, 2008 at 16:01
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.
novembro 28th, 2008 at 20:22
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.