Когда вы изучаете реляционную теорию, внешние ключи, конечно, обязательны. Но на практике, в каждом месте, где я работал, табличные продукты и объединения всегда выполняются путем указания ключей явно в запросе, вместо того, чтобы полагаться на внешние ключи в СУБД.
Таким образом, вы могли бы, конечно, присоединиться к двум таблицам по полям, которые не предназначены для внешних ключей и имеют неожиданные результаты.
Почему вы так думаете? Должна ли СУБД обеспечивать, чтобы соединения и продукты выполнялись только с помощью внешних ключей?
EDIT: Спасибо за все ответы. Теперь мне ясно, что основной причиной для FK является целостность ссылок. Но если вы создаете БД, все отношения в модели (I.E. стрелки в ERD) становятся внешними ключами, по крайней мере теоретически, независимо от того, определяете ли вы их как таковые в своей СУБД, они семантически FK. Я не могу представить себе необходимость объединения таблиц по полям, которые не являются FK. Может ли кто-нибудь привести пример, который имеет смысл?
PS: Я знаю о том, что отношения N: M становятся отдельными таблицами, а не внешними ключами, просто опущены для простоты.