Não existe um tipo de associação "melhor" ou "pior". Eles têm um significado diferente e devem ser usados dependendo dele.
No seu caso, você provavelmente não tem empregados sem work_log (há carreiras em que a tabela), então LEFT JOIN
e JOIN
será equivalente no resultado. No entanto, se você tivesse uma dessas coisas (um novo funcionário sem work_log registrado), um número JOIN
omitido seria esse funcionário, enquanto uma junção esquerda (cuja primeira tabela é funcionários) mostraria todos eles e nulos nos campos de work_log, se houver não são correspondências.
Novamente, o desempenho é uma coisa secundária para consultar a correção. Algumas pessoas dizem que você não deve usar LEFT JOIN
s. É verdade que um LEFT JOIN força o otimizador a executar a consulta em uma ordem específica, impedindo algumas otimizações (reordenação de tabelas) em alguns casos. Aqui está um exemplo . Mas você não deve escolher um sobre o outro se a correção / significado for sacrificado, pois uma INNER JOIN não é inerentemente pior. O restante das otimizações usuais se aplica como de costume.
Em resumo, não use LEFT JOIN
se você realmente quer dizer INNER JOIN
.
No MySQL CROSS JOIN
, INNER JOIN
e JOIN
são os mesmos. No padrão e semântica, a CROSS JOIN
é INNER JOIN
uma ON
cláusula sem , portanto você obtém todas as combinações de linhas entre tabelas.
Você tem exemplos de todos os tipos semânticos de junção na Wikipedia . Na prática, no MySQL, tendemos apenas a escrever JOIN
e LEFT JOIN
.