INNER JOIN: como combinar dados em SQL

inner join sql

A junção de tabelas é uma operação comum em sistemas de gerenciamento de dados relacionais e INNER JOIN é uma das operações mais utilizadas para realizar essa tarefa. Assim, utilizamos para combinar linhas de duas tabelas com base em uma coluna comum, permitindo obter resultados mais abrangentes e detalhados para as consultas.

Além disso, também é fundamental para manter a integridade referencial em sua base de dados, garantindo que as informações relacionadas estejam sempre relacionadas entre si e asssim, essa pode ser usado em qualquer banco de dados, como um banco MySQL presente na hospedagem de sites Homehost.

Neste artigo, vamos explorar em detalhes como funciona INNER JOIN no SQL, como usar essa operação para combinar tabelas e obter resultados precisos, e como otimizar o uso de INNER JOIN em consultas complexas em conjuntos com outras funções.

Sintaxe

A sintaxe básica do INNER JOIN em SQL é a seguinte:

SELECT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.column = table2.column

O INNER JOIN é usado para combinar duas ou mais tabelas com base em uma, ou mais colunas comuns. A cláusula ON é usada para especificar a condição que deve ser satisfeita para que duas linhas sejam consideradas igual.

Por exemplo, suponha que tenhamos duas tabelas, students e courses, que contêm informações sobre os alunos e as aulas que eles estão tomando. Portanto, para encontrar os alunos que estão tomando duas aulas em uma determinada disciplina, podemos usar o INNER JOIN da seguinte maneira:

SELECT s.name, c1.name AS course1, c2.name AS course2
FROM students s
INNER JOIN courses c1 ON s.student_id = c1.student_id
INNER JOIN courses c2 ON s.student_id = c2.student_id
WHERE c1.name = 'Matemática' AND c2.name = 'Matemática'

Neste exemplo, estamos usando o INNER JOIN para combinar as tabelas students e courses com base na coluna student_id, que está presente nas duas tabelas. Assim, estamos usando a cláusula WHERE para filtrar apenas aqueles alunos que estão tomando duas aulas com o nome ‘Matemática’. Dessa forma, o resultado será uma lista de todos os alunos que estão tomando duas aulas de matemática.

Diferença entre INNER JOIN e OUTER JOIN

INNER JOIN e OUTER JOIN são tipos de joins em SQL usados para combinar duas ou mais tabelas. No entanto, eles têm algumas diferenças importantes.

INNER JOIN

O INNER JOIN é usado para combinar duas tabelas com base em uma ou mais colunas comuns. Ele retorna apenas as linhas que correspondem a todas as condições de join especificadas. Por exemplo, se queremos combinar duas tabelas, students e courses, com base na coluna student_id, que está presente nas duas tabelas, o INNER JOIN retorna apenas os alunos que estão matriculados em pelo menos uma aula.

  • Exemplo de INNER JOIN:

Para combinar as duas tabelas com base na coluna student_id, que está presente nas duas tabelas, podemos usar o INNER JOIN da seguinte maneira:

SELECT s.name, c.name AS course_name, c.credits
FROM students s
INNER JOIN courses c ON s.student_id = c.student_id

O INNER JOIN acima irá combinar as tabelas students e courses com base na coluna student_id, e retornará apenas as linhas que correspondem a todas as condições de join especificadas. Dessa forma, isso significa que apenas os alunos que estão matriculados em pelo menos uma aula serão incluídos no resultado.

OUTER JOIN

Já utilizamos o OUTER JOIN combinar duas tabelas com base em uma ou mais colunas comuns, mas ele retorna todas as linhas da tabela de origem, mesmo que não haja uma correspondência no join. Existem três tipos de OUTER JOIN: LEFT JOIN, RIGHT JOIN e FULL JOIN (ou JOIN Nulo). Cada um deles retorna diferentes conjuntos de linhas, dependendo da tabela de origem que está sendo usada.

  • Exemplo de OUTER JOIN:

Para combinar as duas tabelas com base na coluna student_id, mas incluir todas as linhas da tabela students, independentemente de ter uma correspondência na tabela courses, podemos usar o LEFT JOIN da seguinte maneira:

SELECT s.name, c.name AS course_name, c.credits
FROM students s
LEFT JOIN courses c ON s.student_id = c.student_id

Em resumo, a escolha entre INNER JOIN e OUTER JOIN depende das necessidades do negócio e da maneira como as tabelas estão relacionadas. Portanto, podemos ver na imagem a baixo os tipos de JOIN e que cada um tem sua finalidade:

Vários tipos de join
autor gustavo
Utilize esta imagem como referência e aprenda os diversos tipos de Join para trabalhar no dia a dia. Além disso, faça muitos exercícios para aprender melhor sobre INNER JOIN no SQL – Indica Gustavo Carvalho

Exemplos práticos de como usar INNER JOIN em diferentes casos de uso

O INNER JOIN é uma das operações mais comuns em SQL e pode ser usado em conjunto com outras funções e comandos para realizar tarefas complexas na manipulação de dados. Assim, aqui estão alguns exemplos práticos de como aplicarmos a operação com outras funções e comandos:

  1. Atualizar dados em uma tabela
    Podemos aplicar a operação para atualizar dados em uma tabela. Dessa forma, aqui está um exemplo de como atualizar o endereço de e-mail de um usuário em uma tabela de usuários com a tabela de contatos:
UPDATE users
SET email = c.email
FROM users u
JOIN contacts c ON u.id = c.user_id
WHERE u.id = 1;
  1. Selecionar dados usando INNER JOIN com CASE WHEN
    Podemos utilizar as duas operações para selecionar dados com base em condições. Assim, temos um exemplo selecionando os nomes dos usuários e seus e-mails, dependendo de se o usuário é ativo ou inativo:
SELECT users.name, contacts.email
FROM users
JOIN contacts ON users.id = contacts.user_id
JOIN status ON contacts.status_id = status.id
WHERE status.name = 'ativo' OR CASE WHEN status.name = 'inativo' THEN users.id = 1 ELSE 0 END;
  1. Selecionar dados usando INNER JOIN com LIMIT e COUNT
    Selecionando um número específico de registros e contar o número total de registros de uma tabela. Assim, estamos selecionando 10 usuários com mais contatos e mostrar o número total de contatos:
SELECT users.name, COUNT(contacts.id) as num_contacts
FROM users
JOIN contacts ON users.id = contacts.user_id
JOIN status ON contacts.status_id = status.id
GROUP BY users.id
ORDER
BY num_contacts DESC
LIMIT 10;

4. Selecionar dados usando INNER JOIN com GROUP BY e DELETE

Podemos usar o INNER JOIN com a função GROUP BY e DELETE para excluir registros duplicados de uma tabela. Exemplo:

DELETE FROM contacts
FROM contacts c
JOIN contacts c2 ON c2.user_id = c.user_id AND c2.id <> c.id
GROUP BY c.user_id, c.id;
  1. Selecionar dados usando INNER JOIN com ORDER BY
    Aplicamos o INNER JOIN com a função ORDER BY para ordenar os resultados de uma consulta. Exemplo:
SELECT contacts.name
FROM contacts
JOIN users ON contacts.user_id = users.id
WHERE users.id = 1
ORDER BY users.name;

Esses são apenas alguns exemplos de como o INNER JOIN pode ser usado em conjunto com outras funções e comandos em SQL. Há muitas outras maneiras de usar o INNER JOIN, dependendo das necessidades específicas de cada consulta e comandos avançados.

Técnicas avançadas de INNER JOIN

Além das técnicas básicas de INNER JOIN, existem algumas técnicas avançadas que podem ser usadas para obter resultados mais precisos e eficientes. Aqui estão alguns exemplos:

  1. INNER JOIN com vários campos
    O INNER JOIN pode ser usado com vários campos em vez de apenas um campo da tabela. Isso permite que você selecione dados de várias tabelas com base em mais de um campo. Aqui está um exemplo de como selecionar os nomes dos usuários e os endereços de e-mail de todos os contatos de um usuário:
SELECT users.name, contacts.email
FROM users
JOIN contacts ON users.id = contacts.user_id
JOIN status ON contacts.status_id = status.id;
  1. INNER JOIN com subconsultas
    Aplicamos o INNER JOIN com subconsultas para obter dados de tabelas maiores. Assim, aqui está um exemplo de como selecionar os nomes dos usuários e seus endereços de e-mail, dependendo de se o usuário é ativo ou inativo, usando uma subconsulta:
SELECT users.name, contacts.email
FROM users
JOIN contacts ON users.id = contacts.user_id
JOIN status ON contacts.status_id = status.id
WHERE status.name = 'ativo' OR (status.name = 'inativo' AND users.id = 1);
  1. Cláusulas WHERE compartilhadas
    Utilizamos o INNER JOIN com cláusulas WHERE compartilhadas para especificar condições que afetam as tabelas em que o utilizamos o JOIN. Assim, aqui temos um exemplo de como selecionar os nomes dos usuários e seus endereços de e-mail, dependendo de se o usuário é ativo ou inativo, e ignorar usuários com endereços de e-mail vazios:

SELECT users.name, contacts.email
FROM users
JOIN contacts ON users.id = contacts.user_id
JOIN status ON contacts.status_id = status.id
WHERE status.name = 'ativo' OR (status.name = 'inativo' AND users.id = 1) AND contacts.email IS NOT NULL;
  1. Cadeia de caracteres
    Utilizamos o INNER JOIN com cadeia de caracteres para separar campos em uma consulta. Assim , aqui está um exemplo de como selecionar os nomes dos usuários e seus endereços de e-mail, separando os campos com uma vírgula:
SELECT users.name, contacts.email
FROM users
JOIN contacts ON users.id = contacts.user_id
JOIN status ON contacts.status_id = status.id
FOR CE,CA IN (SELECT CONCAT(users.name, ',', contacts.email) AS nome_email FROM users
JOIN contacts ON users.id = contacts.user_id
JOIN status ON contacts.status_id = status.id)
SELECT * FROM CE,CA;

Temos essas técnicas avançadas que utilizamos de INNER JOIN em SQL, obtendo resultados mais precisos e eficientes.

Limitações e erros comuns 

Embora o INNER JOIN seja uma ferramenta poderosa para unir dados de diferentes tabelas em uma consulta, existem algumas limitações e erros comuns que você precisa ser ciente. Aqui estão alguns exemplos:

  1. Dependência de chave estrangeira
    Uma das limitações do INNER JOIN é que ele depende da criação de uma chave estrangeira na tabela de destino, ou seja, a chave estrangeira precisa está corretamente na tabela de destino para que o JOIN funcione corretamente.
  2. Desempenho
    O INNER JOIN pode ser um processo lento, especialmente quando trabalhando com grandes quantidades de dados. Assim, isso pode afetar significativamente o desempenho do seu aplicativo. Para melhorar o desempenho, você pode precisar otimizar suas consultas usando técnicas de indexação ou limitar o número de registros retornados.
  3. Erros de sintaxe
    O INNER JOIN pode ser vulnerável a erros de sintaxe, especialmente quando a consulta é complexa. Portanto, pode levar a resultados inesperados ou consultas que falham completamente.
  4. Resultados duplicados
    O INNER JOIN pode produzir resultados duplicados se as tabelas de origem contêm registros duplicados. Dessa forma, levando a resultados inesperados ou consultas que falham completamente.
  5. Exclusão de dados
    O INNER JOIN pode excluir dados de uma tabela se não houver correspondências na outra tabela. Para evitar a exclusão de dados, utilizamos uma cláusula LEFT JOIN ou incluir uma cláusula WHERE para limitar os resultados.

Nesse sentido, essas são algumas das limitações e erros comuns que você precisa ser ciente ao usar INNER JOIN. Ao evitar e aprender esses problemas comuns no SQL, você pode ajudar a garantir que suas consultas sejam precisas e eficientes.

Este artigo foi útil?

Obrigado pela resposta!
Picture of Schênia T

Schênia T

Cientista de dados, apaixonada por ferramentas de tecnologia e games. Graduanda em Estatística pela UFPB. Seu hobby é maratonar séries, curtir uma boa música trabalhando ou cozinhando, ir ao cinema e aprender coisas novas!

Contato: schenia.blog@homehost.com.br

Ganhe 30% OFF

Indique seu nome e e-mail,e ganhe um cupom de desconto de 30% para sempre na Homehost!