Creo que tienes un poco de confusión, tienes una idea equivocada, 'EXISTS' funciona más rápido que 'IN' y estoy tratando de hacerte entender la razón.
EXISTS devuelve un valor booleano y devolverá un valor booleano en la primera coincidencia. Entonces, si se trata de duplicados/múltiplos, 'EXISTE' será más rápido de ejecutar que 'IN' o 'JOIN', según los datos y las necesidades.
Mientras que 'IN' es azúcar sintáctico para cláusulas OR. Si bien es muy complaciente, hay problemas al tratar con muchos valores para esa comparación (al norte de 1,000). En caso de duplicados/múltiplos, 'IN' verifica todos los valores que existen, lo que naturalmente consume más tiempo para ejecutar que 'EXISTE', es por eso que 'IN' siempre es comparativamente más lento que 'EXISTS'.
Espero haber aclarado tu confusión.