Se a tabela usada na subconsulta retornar um valor duas vezes, um JOIN também retornará as linhas correspondentes duas vezes, enquanto uma condição IN ou EXISTS as retornará apenas uma vez.
JOINs tendem a ter melhor desempenho, mas há situações em que isso pode não ser o caso, em particular para cada banco de dados (incluindo a versão).
Referência: