Se la tabella utilizzata nella sottoquery restituisce un valore due volte, un JOIN restituirà anche le righe corrispondenti due volte, mentre una condizione IN o EXISTS le restituirà una sola volta.
I JOIN tendono ad avere prestazioni migliori, ma ci sono situazioni in cui potrebbe non essere così, in particolare per ogni database (inclusa la versione).
Riferimento: