After this post I've got a question how one can tell if his outer join was converted to inner. You can find it out by looking at the warning generated by EXPLAIN EXTENDED. If the outer join wasn't converted, you'll see it in the rewritten query in the warning:
mysql> explain extended select * from t1 left join (t2, t3) on t2.a= t1.a; ... 3 rows in set, 1 warning (0.00 sec) mysql> show warnings\G *************************** 1. row *************************** Level: Note Code: 1003 Message: select `test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `a`,`test`.`t3`.`a` AS `a` from `test`.`t1` left join (`test`.`t2` join `test`.`t3`) on ((`test`.`t2`. `a` = `test`.`t1`.`a`)) where 1
In this query LEFT JOIN is not converted to inner.
Now let's try a query where outer join will be converted:
mysql> explain extended select * from t1 left join (t2, t3) on …[Read more]