Diferença de " a partir de uma junção à esquerda b "vs."A, b"

As perguntas fazem o mesmo? Qual é o padrão?

Vou perder o desempenho se mudar uma destas formas de escrever a consulta?

Query 1

   SELECT a.*, b.id AS b_id
     FROM table_a AS a
LEFT JOIN table_b AS b
       ON a.id = b.id

Query 2

   SELECT a.*, b.id AS b_id
     FROM table_a a, table_b b
    WHERE a.id = b.id
 0
Author: Jensen Ching, 2012-11-06

1 answers

Eles devolvem resultados diferentes.

Uma declaração de junção à esquerda irá devolver as linhas, mesmo que não existam registos associados no table_ B que correspondam ao ID do table_a. Por isso, irá devolver todas as linhas em table_ a, emparelhadas com uma linha correspondente em table_ A ou uma linha table_ B em branco/nulo (se para essa linha em table_ a não existir nenhuma linha correspondente em table_ B).

A segunda consulta é um atalho para uma junção interna. Esta pesquisa só irá devolver exclusivamente as linhas que correspondem à condição a.id = b.id. Segundo a consulta também pode ser escrita como:

SELECT a.*, b.id AS b_id
FROM table_a a
INNER JOIN table_b b 
ON a.id = b.id

Para responder à sua pergunta de desempenho, por favor veja as respostas num tópico relacionado com SO Aqui.

 5
Author: Jensen Ching, 2017-05-23 12:27:43