No banco de dados MySQL, por padrão, quando criamos um indice do tipo UNIQUE, este aceita vários valores NULL, por exemplo, uma tabela com os campos ID, Nome e CPF é possível adicionar vários registros com o campo CPF sendo NULL:
1: Insert Pessoa (Nome, CPF) values ('Fulano', null)
2: Insert Pessoa (Nome, CPF) values ('Ciclano', null)
3: Insert Pessoa (Nome, CPF) values ('Richard', ‘1’)
4: Insert Pessoa (Nome, CPF) values ('Matheus', ‘2’)
Se eu tentar fazer os inserts acima em um banco de dados SQL Server, ele tentará indexar o null também e o insert da linha 2 vai falhar.
Para que o null não seja indexado, deve-se criar o indice no SQL Server como segue:
CREATE UNIQUE INDEX IX_CPF ON Pessoa(CPF) WHERE (CPF IS NOT NULL)
Eu testei isso apenas no SQL Server 2008 R2.
Fonte: http://goo.gl/nNyV