Início Entendendo as diversas formas de Join
Thiago Cruz 23 de outubro de 2015 Comente! SQL Server
Neste artigo pretendo falar sobre o que acredito ser a duvida de muitos que estão iniciando na área de banco de dados e que a principio não conseguem definir um entendimento legal sobre Joins ou as diversas formas de Join.
Neste artigo vou trazer algumas querys onde a pesar da clausula Join não ser informada o SQL Server tem o entendimento que o que está sendo executado na verdade é o Join. Trago o plano de execução e vamos ver que o plano não se altera, quero que todos entendam as varias formas de Joins, quando usar e como utilizar.
Acredito que a melhor forma de realizar a junção de duas tabelas realmente é o Inner Join, Left Join, Right Join e por ai em diante, mas essa não é a unica forma disponível, vamos analisar alguns casos.
Criando tabelas de teste:
Create Table Cargo (id_Cargo int Primary key identity(1,1),
nm_Cargo varchar(50))
Insert Into Cargo (nm_Cargo) Values ('Analista de Suporte'),('DBA SQL Server'),('Desenvolvedor')
Create table Funcionario (id_Funcionario int primary key identity(1,1),
nm_Funcionario varchar(50),
id_Cargo int)
Insert Into Funcionario (nm_Funcionario,id_Cargo) values ('Thiago Cruz',2),('Pedro Cardoso',1),('Alexandre Curvelo',2),('Ricardo Almeida',3),('Wallacy Marques',1)
Alter table Funcionario ADD Foreign Key (id_Cargo) references Cargo (id_Cargo)
No código abaixo realizaremos nosso primeiro select e acompanharemos o plano de execução onde mostra o SQL Server assumindo que a quero realiza o Join.
Select f.nm_Funcionario, c.nm_Cargo
From Funcionario f, Cargo c
Where f.id_Cargo = c.id_Cargo
Nesta segunda query eu mudo um pouco a sintaxe mas se acompanharmos o plano de execução podemos verificar que nada mudou.
Select f.nm_Funcionario, f.nm_Cargo
From (select f.nm_Funcionario, c.nm_Cargo from Funcionario f, Cargo c Where f.id_Cargo = c.id_Cargo) f
Nesta terceira query eu executo um Join e vamos ver como o plano de execução vai atuar.
Inner Join Cargo c
On f.id_Cargo = c.id_Cargo
Uma observação o que muita gente não sabe é que quando realizamos um JOIN sem informar (Inner, Left, Right, Full e etc…) estamos na verdade executando um Inner Join. O SQL Server entende que um JOIN é a mesma coisa que um Inner Join.