En MySQL 5.1.51, ambos tienen planes de ejecución de consultas idénticos:
mysql> explain select * from table1 a inner join table2 b on a.pid = b.pid;
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+
| 1 | SIMPLE | b | ALL | PRIMARY | NULL | NULL | NULL | 986 | |
| 1 | SIMPLE | a | ref | pid | pid | 4 | schema.b.pid | 70 | |
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+
2 rows in set (0.02 sec)
mysql> explain select * from table1 a, table2 b where a.pid = b.pid;
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+
| 1 | SIMPLE | b | ALL | PRIMARY | NULL | NULL | NULL | 986 | |
| 1 | SIMPLE | a | ref | pid | pid | 4 | schema.b.pid | 70 | |
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+
2 rows in set (0.00 sec)
table1
ha 166208 filas; table2
tiene alrededor de 1000 filas.
Este es un caso muy simple; de ninguna manera demuestra que el optimizador de consultas no se confundiría y generaría diferentes planes en un caso más complicado.
Buena pregunta. Tengo curiosidad por qué se usa la unión explícita. ¿No es posible hacer todas las consultas sin él? – andrew
use la palabra clave EXPLAIN para saber la diferencia sobre ambas consultas ... use JOIN y vea la diferencia ... Si prueba en una tabla más de 100k registros, puede ver la diferencia ... –
@andrew Mi pregunta era en realidad si la unión implícita era una forma de "hack" (como en "Una consulta que involucra más de una tabla, no usa una combinación? Eso es un truco ¿no?") – bobobobo