Cita: Leyendo la documentación de mysql vi que dice que las condiciones en el ON deberían hacerse en la cláusula WHERE, quedando el ON vacío.
El WHERE no es optimizable por el parser. Como se ejecuta
luego de realizar el JOIN, entonces lee todos los registros
antes de aplicar la condición. En cambio poner la condición con el ON permite aplicar los índices de la FK u otros existentes, y no se leen todos los registros.
Cita: Entonces ¿Por qué habilitan el ON si no aconsejan su uso?
Por la misma razón que un CHECK no genera errores de sintaxis de un ALTER TABLE: Compatibilidad entre motores de tablas y con el ANSI SQL. Pero eso no implica que sea la mejor manera.
Por experiencia: Usa INNER JOIN con ON y
no pongas las condiciones del JOIN en el WHERE. Jamás.
Y no le des bolilla a las cosas escritas en los manuales hace ocho años. Muchas de ellas están basadas en datos referidos a versiones todavía más antiguas del MySQL (u otros DBMS).
Son lo que se llamaría "herencias obsoletas".