O MySQL suporta as seguintes sintaxes JOIN
          para uso em instruções SELECT:
        
tabela_ref, tabela_ref
tabela_ref [INNER | CROSS] JOIN table_reference [join_condition]
tabela_ref STRAIGHT_JOIN tabela_ref
tabela_ref LEFT [OUTER] JOIN table_reference [join_condition]
tabela_ref NATURAL [LEFT [OUTER]] JOIN tabela_ref
{ OJ tabela_ref LEFT OUTER JOIN tabela_ref ON expr_condicional }
tabela_ref RIGHT [OUTER] JOIN table_reference [join_condition]
tabela_ref NATURAL [RIGHT [OUTER]] JOIN tabela_ref
          Onde tabela_ref é definido como:
          
nome_tabela [[AS] alias] [[USE INDEX (lista_indice)] | [IGNORE INDEX (lista_indice)] | [FORCE INDEX (lista_indice)]]
          a condição_join é definido como:
        
ON expr_condicional | USING (lista_colunas)
          Geralamente você não deverá ter nenhuma condição na parte
          ON que é usada para restringir quais
          registros você terá no seu resultado, mas ao invés disto,
          especificar estas condições na cláusula
          WHERE. Existem exceções para isto.
        
          Note que a sintaxe INNER JOIN permite uma
          condição_join apenas a partir da versão
          3.23.17. O mesmo acontece para JOIN e
          CROSS JOIN apenas a partir do MySQL 4.0.11.
        
          A última sintaxe LEFT OUTER JOIN mostrada
          na lista anterior só existe para compatibilidade com ODBC:
        
              Pode se usar um alias para referência a tabelas com
              nome_tabela AS nome_alias ou
              nome_tabela nome_alias:
            
mysql>SELECT t1.nome, t2.salario FROM funcionarios AS t1, info AS t2->WHERE t1.nome = t2.nome;
              A condicional ON é qualquer condição
              da forma que pode ser usada em uma cláusula
              WHERE.
            
              Se não houver registros coincidentes para a tabela a
              direita da parte ON ou
              USING em um LEFT
              JOIN, uma linha com NULL
              atribuído a todas as colunas é usada para a tabela a
              direita. Você pode usar este fato para encontrar registro
              em uma tabela que não houver contrapartes em outra tabela
            
mysql>SELECT tabela1.* FROM tabela1->LEFT JOIN tabela2 ON tabela1.id=tabela2.id->WHERE tabela2.id IS NULL;
              Este exemplo encontra todas as linhas em
              tabela1 com um valor
              id que não está presente em
              tabela2 (isto é, toda as linhas em
              tabela1 sem linha correspondente em
              tabela2). Assume-se que
              tabela2.id é declarada NOT
              NULL. See
              Secção 5.2.7, “Como o MySQL Otimiza LEFT JOIN e RIGHT
        JOIN”.
            
              A cláusula USING
              (lista_colunas) nomeia uma lista de
              colunas que devem existir em ambas as tabelas. As
              seguintes duas cláusulas são semanticamente idênticas:
            
a LEFT JOIN b USING (c1,c2,c3) a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3
              Um NATURAL [LEFT] JOIN de duas tabelas
              é definido para ser semanticamente equivalente a um
              INNER JOIN ou um LEFT
              JOIN com uma cláusula USING
              que nomeia todas as colunas que exitem em ambas as
              tabelas.
            
              
              INNER JOIN e ,
              (vírgula) são semanticamente equivalentes na ausência
              da condição join: ambos produzirão um produto
              Cartesiano entre as tabelas especificadas. (isto é, todos
              os registros na primeira tabela serão ligados com todos
              os registros na segunda tabela).
            
              RIGHT JOIN funciona de forma análoga a
              um LEFT JOIN. Para manter o código
              portável entre banco de dados, é recomendado usar
              LEFT JOIN em vez de RIGHT
              JOIN.
            
              
              STRAIGHT_JOIN é identico a
              JOIN, exceto pelo fato de que a tabela
              de esquerda sempre é lida antes da tabela da direita. Ele
              pode ser usado para aqueles casos (poucos) onde o
              otimizador join coloca as tabelas na ordem errada.
            
              
              
              
              Como na versão 3.23.12, você pode dar sugestões sobre
              qual índice o MySQL deve us quando retornar informações
              de uma tabela. Isto é útil se EXPLAIN
              mostar que o MySQL está utilizando o índice errado da
              lista de índices possíveis. Especificando USE
              INDEX (lista_indice), você pode dizer ao MySQL
              para usar somente um dos índices possíveis para
              encontrar registros em uma tabela. A sintaxe alternativa
              IGNORE INDEX (lista_indice) pode ser
              usado para dizer ao MySQL para não utilizar índices
              particulares.
            
              Na versão 4.0.9 do MySQL você também pode utilizar
              FORCE INDEX. Ele funciona como
              USE INDEX (key_list) mas com assume que
              uma varredura na tabela é MUITO cara. Em outras palavras,
              uma varredura na tabela só será feita se não houver
              modo de uitlizar um dos índices fornecidos para se
              enecontrar registros no tabela.
            
              USE/IGNORE KEY são sinônimos de
              USE/IGNORE INDEX.
            
          Nota:
          USE/IGNORE/FORCE INDEX afeta apenas os
          índices usados quando o MySQL decide como encontrar registros
          na tabela e como fazer a ligação. Ele não tem efeito se um
          índice será usado ao resolver um ORDER BY
          ou GROUP BY.
        
Alguns exemplos:
mysql>SELECT * FROM tabela1,tabela2 WHERE tabela1.id=tabela2.id;mysql>SELECT * FROM tabela1 LEFT JOIN tabela2 ON tabela1.id=tabela2.id;mysql>SELECT * FROM tabela1 LEFT JOIN tabela2 USING (id);mysql>SELECT * FROM tabela1 LEFT JOIN tabela2 ON tabela1.id=tabela2.id->LEFT JOIN tabela3 ON tabela2.id=tabela3.id;mysql>SELECT * FROM tabela1 USE INDEX (chave1,chave2)->WHERE chave1=1 AND chave2=2 AND chave3=3;mysql>SELECT * FROM tabela1 IGNORE INDEX (chave3)->WHERE chave1=1 AND chave2=2 AND chave3=3;
          See Secção 5.2.7, “Como o MySQL Otimiza LEFT JOIN e RIGHT
        JOIN”.
        
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.

