Isso está relacionado ao comprimento da cláusula IN - e o que às vezes é chamado de BUG no MySQL.
O MySQL parece ter um limite baixo para cláusulas IN, quando ele trocará para um TABLE/INDEX SCAN em vez de coletar várias partições (uma por item IN) e fundi-las.
Com um INNER JOIN, quase sempre é forçado a usar um direto linha por linha na coleção JOIN, e é por isso que às vezes é mais rápido
Consulte estas páginas de manual do MySQL
Posso estar errado, pois parece implicar que
IN (constant value list)
deve sempre usar uma pesquisa binária em cada item ...