Utilizando INNER e LEFT JOIN

Utilizando INNER e LEFT JOIN

Boa tarde a todos,

Este tutorial tem como objetivo de explicar o uso dos comandos INNER JOIN e LEFT JOIN em comandos SQL. Por se tratar de um comando nativo da linguagem SQL, o modo de utilizar é o mesmo de um banco para o outro, ou pelo menos na maioria dos SGDB conhecidos atualmente. Levamos em conta este script de duas tabelas de um banco de dados (neste exemplo é para o MySQL).

Neste esquema todo produto deve estar ligado diretamente a uma categoria e uma categoria pode estar em vários produtos, até este ponto tudo bem, tudo bem simples, porque o nosso tutorial se baseia nos comandos de JOIN utilizados em SELECT´s.

O comando INNER JOIN

Este comando se baseia em fazer a ligação de uma tabela com a outra onde é necessário que haja a ligação das duas pontas para que um resultado seja retornado, no nosso exemplo que uma categoria tenha um produto ou um produto tenha uma categoria.
Exemplo de uso segundo as tabelas do exemplo deste artigo:

Vantagens

  • Quando usado, as ligações entre as tabelas são baseadas nos índices do banco, estes são criados geralmente junto com as ligações de foreign keys das tabelas ou senão criados pelo desenvolvedor para agilizar buscas no banco de dados;
  • É muito mais rápido do que utilizar o comando LEFT para fazer a mesma ligação.

Desvantagens

  • As vezes é necessário fazer mais ligações na cláusula WHERE da SELECT porque a sua ligação no limitador ON não supre todos os requisitos.

O comando LEFT JOIN

A ligação de tabelas utilizando LEFT é para casos em que não é necessário que haja uma ligação direta das tabelas da instrução SQL, ou seja, um produto não precisa ter uma categoria e nem uma categoria precisa ter um produto. Nos casos em que é utilizado o LEFT para ligar, quando ocorre de um registro não ligar com a outra tabela, o registro “faltante” apenas é retornado como NULO.

Exemplo de uso segundo as tabelas do nosso exemplo:

Vantagens

  • Poucas, apenas as vezes pouca o tempo para não escrever uma query unida, ou seja, que utiliza o comando UNION para trazer os mesmos registros.

Desvantagens

  • As vezes é necessário fazer mais ligações na cláusula WHERE da SELECT porque a sua ligação no limitador ON não supre todos os requisitos;
  • Uma ligação com LEFT faz FULL na tabela alvo, no caso de categoria para produto, seria feito um FULL em todos os registros da tabela produto;
  • Não utiliza indices para ligar as tabelas mencionadas na instrução.

Dica útil

O uso do comando LEFT JOIN não é muito aconselhável por causa da perca de performance em tabelas com muitos registros, um exemplo de “fugir” dele é através da união de queries com o comando UNION.

Abraços e até a próxima.

Blog Databases