Estoy de acuerdo en que un ON DELETE CASCADE es muchísimo más eficiente. Lo que yo quería destacar es que según el manual de referencia ese DELETE debería funcionar, ya que, también según el manual:
Cita: Puede especificar múltiples tablas en un comando DELETE para borrar registros de una o más tablas dependiendo de una condición particular en múltiples tablas. Sin embargo, no puede usar ORDER BY o LIMIT en un DELETE de múltiples tablas.
La parte table_references lista las tablas involucradas en el join. Esta sintaxis se describe en Sección 13.2.7.1, “Sintaxis de JOIN”.
y es la sección 13.2.7.1 dice:
Cita: MySQL soporta las siguientes sintaxis de JOIN para la parte table_references de comandos SELECT y DELETE y UPDATE de múltiples tablas:
table_reference, table_reference
table_reference [INNER | CROSS] JOIN table_reference [join_condition]
table_reference STRAIGHT_JOIN table_reference
table_reference LEFT [OUTER] JOIN table_reference join_condition
table_reference NATURAL [LEFT [OUTER]] JOIN table_reference
{ ON table_reference LEFT OUTER JOIN table_reference
ON conditional_expr }
table_reference RIGHT [OUTER] JOIN table_reference join_condition
table_reference NATURAL [RIGHT [OUTER]] JOIN table_reference
Y además:
Cita: INNER JOIN y , (coma) son semánticamente equivalentes en la ausencia de una condicicón de join: ambos producen un producto Cartesiano entre las tablas especificadas (esto es, cada registro en la primera tabla se junta con cada registro en la segunda tabla).
Por ello mi duda es que si dicen que
debería funcionar, ¿por qué razón ni tu ni él han logrado que esto funcione?
Googleando, he encontrado este caso, en que se muestra la ocurrencia de ese DELETE:
http://www.java2s.com/Tutorial/MySQL...TableJoins.htm