Selon cette question , la prise en charge des tuples dans MySQL n'est pas optimisée. Comme @O.Jones l'écrit dans son commentaire, le planificateur de requêtes dans MySQL est une bête extrêmement complexe, et des choses qui devraient travail ne se comportent pas toujours comme on pourrait s'y attendre.
Je pense que votre deuxième requête est plus rapide car la première clause where dept_id in (101, 103)
réduit l'espace de recherche pour le second qui utilise les tuples. L'optimiseur de requête devrait le faire automatiquement, mais au moins dans votre exemple ne le fait pas.
Je ne crois pas le IN
La clause est le problème - c'est la comparaison de tuples qui analyse la table entière et n'utilise pas les index disponibles.