Mariana,
Temos que observar algumas coisas ...
A ligação ente os dados das tabelasé feita pelas informações, e não pelas chaves, ok.
Falando de forma simplista, banana liga com banana, e maçã liga com maçã. As clausulas de junção de dados (leia-se os tipos de JOINs) não perguntam às tabelas se elas tem ou não chave: se o valor bate, ele é retornado e pronto.
Entendido isto, então para que eu tenho as chaves?
Os objetos DDL voltados para a restrição de informações , como são as Foreign Keys , são objetos que para garantir a integridade referencial entre as informações. No caso desta especificamente, para garantir que um valor não entrena tabela-filho sem que antes seja existente em uma tabela-pai (referencia).
Isto nos dará a qualidade e a garantia de que não serão inseridos valores inválidos, e que não serão ligados à tabela que usamos como referencia.
Obseve que eu até posso dizer que uma coluna que tem uma FK que ela aceite nulo. Porém, se um valor não nulo for inserido, FICARÁ RESTRITO de que ele seja existente previamente na tabela a qual foi informado na FK para verificação (REFERENCES nome_da_tabela).
Espero ter ajudado.