Like many things, it's a tradeoff. It's a question of where you want to do the work to verify the data integrity:
(1) use a foreign key (a single point to configure for a table, feature is already implemented, tested, proven to work)
(2) leave it to the users of the database (possible multiple users/apps updating the same table (s) meaning more potential points of failure and increased complexity in testing).
It's more efficient for the database to do (2), easier to maintain and less risk with (1).