A LEFT JOIN B join_condition no MySQL está
        implementada como a seguir:
      
            A tabela B é configurada para ser
            dependente da tabela A e de todas as
            tabelas das quais A depende.
          
            A tabela A é configurada para ser
            dependente de todas as tabelas (exceto B)
            que são usadas na condição LEFT JOIN.
          
            A condição LEFT JOIN é usada para
            decidir como devemos recuperar registros a partir da tabela
            B. (Em outras palavras, qualquer condição na claúsula
            WHERE não é usada).
          
Todas as otimizações padrões de join são feitas, com a excessão que uma tabela é sempre lida depois de todas as tabelas das quais é dependente. Se existir uma dependência circular o MySQL irá emitir um erro.
            Todas as otimizações padrões de WHERE
            são realizadas.
          
            Se existir um registro em A que coincida
            com a cláusula WHERE, mas não existir
            nenhum registro em B que coincida com a
            condição ON então um registro extra em
            B é gerado com todas as colunas com
            valor NULL.
          
            Se você utiliza LEFT JOIN para encontrar
            registros que não existem em alguma tabela e está usando o
            seguinte teste: nome_coluna IS NULL na
            parte WHERE, onde nome_colun é um campo
            que é declarado como NOT NULL, então o
            MySQL para de pesquisar por mais registros (para uma
            combinação particular de chaves) depois de ter encontrado
            um registro que combinar com a condição LEFT
            JOIN.
          
        RIGHT JOIN é implementado de forma análoga
        à LEFT JOIN.
      
        A ordem de leitura das tabelas forçada por LEFT
        JOIN e STRAIGHT JOIN irá ajudar o
        otimizador de joins (que calcula em qual ordem as tabelas devem
        ser unidas) a fazer seu trabalho mais rapidamente, já que
        haverão poucas permutações de tabelas a serem conferidas.
      
Perceba que o texto acima significa que se você fizer uma consulta do tipo:
SELECT * FROM b,a LEFT JOIN c ON (c.key=a.key) LEFT JOIN d (d.key=a.key)
         WHERE b.key=d.key
        A partir do MySQL 4.0.14, o MySQL faz a seguinte otimização
        LEFT JOIN:
      
        Se a condição WHERE é sempre falsa para a
        linha NULL gerada, o LEFT
        JOIN é alterado para um join normal.
      
        Por exemplo, na seguinte consulta a cláusula
        WHERE seria falso se t2.coluna fosse
        NULL, asssim é seguro converter para uma
        join normal.
      
SELECT * FROM t1 LEFT t2 ON (column) WHERE t2.column2 =5; -> SELECT * FROM t1,t2 WHERE t2.column2=5 AND t1.column=t2.column;
        Isto pode ser feito mais rápido já que o MySQL pode agora usar
        a tabela t2 antes da tabela
        t1 se resultasse consulta melhor. Para
        forçar uma ordem de tabela específica, use STRAIGHT
        JOIN.
      
        O MySQL irá fazer uma pesquisa completa em b
        já que o LEFT JOIN irá força-lo a ser lido
        antes de d.
      
A correção neste caso é alterar a consulta para:
SELECT * FROM b,a LEFT JOIN c ON (c.key=a.key) LEFT JOIN d (d.key=a.key)
         WHERE b.key=d.key
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

