O SQL Server permite que você faça muitas coisas tolas.
Você pode até criar uma chave estrangeira em uma coluna que faz referência a si mesma - apesar do fato de que isso nunca pode ser violado, pois todas as linhas atendem à restrição em si mesmas.
Um caso extremo em que a capacidade de criar duas chaves estrangeiras no mesmo relacionamento seria potencialmente útil é porque o índice usado para validar chaves estrangeiras é determinado no momento da criação. Se um índice melhor (ou seja, mais estreito) aparecer mais tarde, isso permitirá que uma nova restrição de chave estrangeira seja criada vinculada ao melhor índice e, em seguida, a restrição original será eliminada sem que haja nenhuma lacuna sem restrição ativa.
(Como no exemplo abaixo)
CREATE TABLE T1(
T1_Id INT PRIMARY KEY CLUSTERED NOT NULL,
Filler CHAR(4000) NULL,
)
INSERT INTO T1 VALUES (1, '');
CREATE TABLE T2(
T2_Id INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
T1_Id INT NOT NULL CONSTRAINT FK REFERENCES T1 (T1_Id),
Filler CHAR(4000) NULL,
)
ALTER TABLE T1 ADD CONSTRAINT
UQ_T1 UNIQUE NONCLUSTERED(T1_Id)
/*Execution Plan uses clustered index*/
INSERT INTO T2 VALUES (1,1)
ALTER TABLE T2 WITH CHECK ADD CONSTRAINT FK2 FOREIGN KEY(T1_Id)
REFERENCES T1 (T1_Id)
ALTER TABLE T2 DROP CONSTRAINT FK
/*Now Execution Plan now uses non clustered index*/
INSERT INTO T2 VALUES (1,1)
DROP TABLE T2, T1;
Como um aparte para o período intermediário, enquanto ambas as restrições existem, quaisquer inserções acabam sendo validadas nos dois índices.