Nível: 2
Pre-requisitos: Noções básicas de SQL (SELECT, FROM E JOIN)
De forma direta, JOIN é usado para cruzar informações entre as tabela de um banco de dados.
Uma dúvida comum gerada pelos iniciantes do SQL é saber a diferença entre LEFT JOIN, INNER JOIN e RIGHT JOIN. Então vamos tirar essa dúvida da maneira mais prática e clara possível.
Para isso vamos precisar de dados, ou seja, tabelas, e neste caso estas 2 serão um bom exemplo:
SELECT HOMEM.NOME_HOMEM, MULHER.NOME_MULHER
FROM HOMEM LEFT JOIN MULHER
ON HOMEM.COD_CASAMENTO = MULHER.COD_CASAMENTO
Resultaria em:

Como podemos ver a consulta retorna todos os homens, casados ou não, e somente as mulheres que são casadas. O LEFT JOIN retorna todos os registros da tabela a esquerda do JOIN, neste caso a Tabela Homem, independente da ligação na cláusula ON. Por isso Maria não apareceu.
INNER JOIN
SELECT HOMEM.NOME_ HOMEM, MULHER.NOME_HOMEM
FROM HOMEM INNER JOIN MULHER
ON HOMEM.COD_MARIDO = MULHER.COD_MARIDO

O INNER JOIN (ou apenas JOIN) é o caso mais comum de usarmos, pois ele junta todos os registros da tabela esquerda e direta que satifazem a cláusula ON.
Como podemos ver Sebastião e Allan ficaram fora desta vez, pois não possuem um COD_CASAMENTO que forme um par com algum registro da Tabela Mulher, assim tambem como Maria.
RIGHT JOIN
SELECT HOMEM.NOME_ HOMEM, MULHER.NOME_MULHER
FROM HOMEM RIGHT JOIN MULHER
ON HOMEM .COD_MARIDO = MULHER.COD_MARIDO

Ao contrário do LEFT JOIN, o RIGHT JOIN retorna todos os elementos da tabela a direita do JOIN, neste caso, retorna todas as mulheres, casadas ou não (Maria esta aparecendo agora), e somente os homens casados. Desta fez Sebastião e Allan ficaram de fora.
Bom pessoal, é isso por enquanto.
Espero ter tirado esse dúvida que assola a maioria dos iniciantes de SQL.
Qualquer dúvida, estou a disposição.
Um abraço. Ate a próxima.
Bônus:
--QUERY USADA (Para estudo)
--DELETA AS TABELAS TEMPORÁRIAS CASO EXISTAM
IF EXISTS(SELECT * FROM TEMPDB..SYSOBJECTS WHERE NAME LIKE '#Cliente%')
DROP TABLE #Cliente
IF EXISTS(SELECT * FROM TEMPDB..SYSOBJECTS WHERE NAME LIKE '#Venda%')
DROP TABLE #Venda
IF EXISTS(SELECT * FROM TEMPDB..SYSOBJECTS WHERE NAME LIKE '#Produto%')
DROP TABLE #Produto
--TABELA TEMPORARIO #CLIENTE
SELECT *
INTO #Cliente
FROM
(SELECT 1 AS Cod_Cliente, 'Renato' AS Nome_Cliente
UNION ALL
SELECT 2 AS Cod_Cliente, 'Ana' AS Nome_Cliente
UNION ALL
SELECT 3 AS Cod_Cliente, 'Carlos' AS Nome_Cliente
UNION ALL
SELECT 4 AS Cod_Cliente, 'Julia' AS Nome_Cliente
UNION ALL
SELECT 5 AS Cod_Cliente, 'Rafael' AS Nome_Cliente
UNION ALL
SELECT 6 AS Cod_Cliente, 'Carla' AS Nome_Cliente
) AS Cliente
--TABELA TEMPORARIO #VENDA
SELECT *
INTO #Venda
FROM
(SELECT 1 AS Cod_Cliente, 1 AS Cod_Produto, 2 AS Quantidade
UNION ALL
SELECT 1 AS Cod_Cliente, 2 AS Cod_Produto, 2 AS Quantidade
) AS VENDA
--TABELA TEMPORARIO #PRODUTO
SELECT *
INTO #Produto
FROM
(SELECT 1 AS Cod_Produto, 'Arroz' AS Nome_Produto, 12.00 AS Preco
UNION ALL
SELECT 1 AS Cod_Produto, 'Feijão' AS Nome_Produto, 8.00 AS Preco
UNION ALL
SELECT 1 AS Cod_Produto, 'Macarrão' AS Nome_Produto, 6.00 AS Preco
UNION ALL
SELECT 1 AS Cod_Produto, 'Biscoito' AS Nome_Produto, 1.50 AS Preco
UNION ALL
SELECT 1 AS Cod_Produto, 'Leite' AS Nome_Produto, 2.00 AS Preco
) AS Produto

Muito bom Post, Pedro.
ResponderExcluirSão dúvidas que muitas pessoas têm e foi explicado de maneira bem fácil!