Quello che stai cercando fa effettivamente parte degli standard ANSI SQL:92, SQL:1999 e SQL:2003, ovvero un vincolo UNIQUE deve impedire la duplicazione di valori non NULL ma accettare più valori NULL.
Nel mondo Microsoft di SQL Server, tuttavia, è consentito un singolo NULL ma più NULL non lo sono...
In SQL Server 2008 , puoi definire un indice filtrato univoco basato su un predicato che esclude i NULL:
CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notnull
ON YourTable(yourcolumn)
WHERE yourcolumn IS NOT NULL;
Nelle versioni precedenti, puoi ricorrere a VIEWS con un predicato NOT NULL per applicare il vincolo.