Joins em SQL
A maior dificuldade na hora de desenvolver uma query é quando precisamos trabalhar corretamente com várias tabelas.
Na maioria das vezes, basta associar as tabelas com comparações simples na cláusula WHERE, porém, as vezes a query necessita ser mais refinada, e aí é que entram os JOINs (LEFT JOIN, RIGHT JOIN, INNER JOIN e FULL JOIN).
Os JOINs podem ser usados as cláusulas WHERE ou FROM, dependendo da base de dados utilizada, algumas suportam o uso de *= para por exemplo um LEFT JOIN ao invés de usar o modo ASCII.
Vamos aos casos de uso:
-LEFT JOIN
Como o próprio nome já diz, usando o LEFT JOIN, você faz a junção de duas tabelas fazendo com que a tabela da esquerda seja a principal, ou seja, você trabalha com todos os registros da tabela da esquerda e com os registros que se interligam através da FK da tabela da direita. Basicamente, se na tabela da direita uma FK fazer referência à uma PK inexistente na tabela da esquerda, esse registro não será selecionado pela SELECT. Um exemplo:
tabela1 é a tabela principal
Outro exemplo sem usar o modo ASCII:
O operador *= significa um LEFT JOIN.
-RIGHT JOIN
Funciona no mesmo esquema do LEFT JOIN, porém nesse caso a tabela da direita será a principal. O operador *= que indica LEFT JOIN também existe para o RIGHT, sendo ele invertido obviamente ficando =*
Um exemplo de RIGHT JOIN:
tabela2 é a tabela principal
Usando o operador =*
-INNER JOIN
O INNER JOIN é a junção mais usada entre os JOINs. Ela retorna somente os registros que teêm uma ligação válida entre PK e FK entre as duas tabelas, ou seja, evita de selecionar um registro onde a FK faz referência à uma PK inexistente.
Vamos ao exemplo:
Assim como o RIGHT e o LEFT JOIN podemos utilizar um operador, nesse caso o =
A forma mais usada de JOIN ao invés do modo ASCII para evitar digitar INNER JOIN e um ON.
-FULL JOIN
Como o próprio nome já diz, retorna FULL, ou seja, todos os registros das duas tabelas, independente de estarem ligadas de forma inválida. Basicamente, diferete da INNER JOIN, trabalha como se as duas tabelas fossem a principal retornando registros que se interligam através de PK e FK e os que a FK fazem referência a uma PK inexistente. Exemplificando:
Dessa forma você praticamente executa um SELECT livre praticamente, porém indica a ligação de PK e FK entre as tabelas
Unindo FULL JOIN ao INNER JOIN podemos por exemplo retornar registros inválidos que não teêm referência entre PK e FK para tratar possíveis erros ou até eliminar registros inválidos ocupando espaço no banco á toa ou corrigir determinados erros.
Existem também os OUTER JOINS.
Com o OUTER JOIN o efeito é quase o mesmo, por exemplo o LEFT OUTER JOIN vai manter os registros da tabela da esquerda sem ligação de PK-FK com a tabela da direita juntando com uma linha nula como se fosse da tabela da direita. Com o RIGHT é ao contrário e o INNER obviamente não existe porque senão ele faria o papel de FULL JOIN.
Bom, espero ter consigo passar algo pra quem precisou de alguma informação daqui.
Dúvidas sintam-se livres para faze-las nos comentários.
Abraços! 


Deixe uma resposta