I noticed in the SQL Server documentation that the list of referenced columns is not a required parameter of a foreign key constraint:
<column_constraint> ::=
[ CONSTRAINT constraint_name ]
{ { PRIMARY KEY | UNIQUE }
(...)
| [ FOREIGN KEY ]
REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CHECK (...)
}
If I omit the ( ref_column )
part, it seems to reference the primary key of the referenced_table_name
. That is most convenient. However, I cannot find any specification of this behavior so I am cautious to use it.
Does anybody know whether it is specified anywhere?
Best Answer
The behaviour is not explicitly mentioned in any of the official SQL Server documentation I am familiar with, but the 1992 Draft SQL Standard (section 11.8.2.b) does say:
Translated, this means an implicit foreign key does reference the primary key of the referenced table. As others have mentioned in comments to the question, it is probably best to be explicit about the relationship though.