Cita: cuando tu realizas una consulta con INNER JOIN, lo que realizas implicitamente es crear una tabla con la multiplicidad de todas las tablas que tengas con inner join, es decir que si tus dos(2) tablas tienen 30 registros cada una, lo que realizas es crear virtualmente una tabla con 900 registros,
@max_mouse699: Estás confundiendo el INNER JOIN con el JOIN implícito no relacionado.
Lo que estás describiendo es el caso del producto cartesiano, que sólo ocurre cuando no existe relación entre las dos tablas, entonces se genera.
Pero el INNER JOIN implica que sólo se relacionarán aquellos registros de acuerdo al criterio rel ON. En ese caso sólo devolverá las direcciones de cada una de las personas de la tabla persona. se podrán repetir registros de personas en aquellos casos donde la persona tenga más direcciones, y no saldrán los datos de la que no tenga dirección declarada. Pero en ningún caso podrán salir datos no relacionados.
El problema de lentitud puede estar dado en que el campo indicado en el WHERE no está debidamente indexado, o bien que "Toledo" aparezca como entrada de más de un determinado porcentaje de los registros de esa tabla, lo que puede causar que MySQL descarte usar el índice y realice un
full tablescan. Y
eso sí es un errro de optimización.