
JOIN `household` ON `voter`.`House_ID`=`household`.`id` `household`.`Address`, `household`.`City`, `household`.`Zip` To illustrate - using the question query from this thread: SELECT `voter`.`ID`, `voter`.`Last_Name`, `voter`.`First_Name`, In general, I feel like taking this approach first generally provides sufficient baseline information to make informed further tuning decisions in most cases. That said, the build in query parsers / optimizers can even get it wrong, trust me I've seen it happen many times. Let the RDBMS query parser do what its designed to do - analyze your statement and translate it to most optimal execution plan based on its evaluation of your index stats and data model design. I prefer to write JOIN type statements in a more "old school" approach first, leaving out any specific JOIN declarations.

IMO - they should not be used in Production code. LEFT JOINS by their very nature are ALWAYS going to be NonDeterministic.

Take for instance, how LEFT (OUTER) JOINS are parsed by MySQL's query optimizer, and the difference in resulting execution plans they could evaluate to per iteration:

Different RDBMS query parsers and optimizers may handle OUTER JOINS very differently. Be wary of "LEFT" JOINS - LEFT JOINS are essentially OUTER JOINS.
