A exclusividade pode ser imposta com uma restrição exclusiva.
Se o índice exclusivo diferencia maiúsculas de minúsculas ou não, é definido pelo agrupamento do servidor (ou da tabela) .
Você pode obter o agrupamento atual do seu banco de dados com esta consulta:
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
e você deve obter algo como:
SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS
Aqui, o "CI_AS" no final do agrupamento significa:CI =não diferencia maiúsculas de minúsculas, AS =diferencia acentos.
Isso pode ser alterado para o que você precisar. Se o seu banco de dados e/ou tabela tiver um agrupamento que diferencia maiúsculas de minúsculas, eu esperaria que a exclusividade do seu índice também diferenciasse maiúsculas de minúsculas, por exemplo, seu abcdef e ABCDEF devem ser aceitáveis como strings exclusivas.
Marco
ATUALIZAR:
Acabei de tentar isso (SQL Server 2008 Developer Edition x64) - funciona para mim (meu banco de dados geralmente usa o agrupamento "Latin1_General_CI_AS, mas posso definir um diferente por tabela / por coluna VARCHAR mesmo):
CREATE TABLE TestUnique
(string VARCHAR(50) COLLATE SQL_Latin1_General_Cp1_CS_AS)
CREATE UNIQUE INDEX UIX_Test ON dbo.TestUnique(string)
INSERT INTO dbo.TestUnique(string) VALUES ('abc')
INSERT INTO dbo.TestUnique(string) VALUES ('ABC')
SELECT * FROM dbo.TestUnique
e eu volto:
string
ABC
abc
e nenhum erro sobre o índice exclusivo sendo violado.