Usando JOINS do SQL no BigQuery

Por Réulison Silva
Réulison Silva
Published on
Joins no BigQuery

Entendendo na prática como os JOINs funcionam no SQL (com BigQuery)

Quando trabalhamos com bancos de dados relacionais, é muito comum termos informações distribuídas em várias tabelas. O JOIN é o recurso do SQL que permite combinar dados de duas ou mais tabelas com base em uma coluna em comum entre elas.

Neste artigo, vamos entender na prática como funcionam os principais tipos de JOIN usando um exemplo clássico: uma base com as tabelas:

  • employees (funcionários)
  • departments (departamentos)

Essas tabelas estão relacionadas pela coluna:

employees.department_id = departments.department_id

Os exemplos abaixo utilizam o BigQuery, mas funcionam em qualquer banco SQL com pequenas adaptações.


📦 Pré-requisito: dataset de funcionários

Considere que você já tenha o dataset employee_data no seu projeto do BigQuery, contendo as tabelas:

  • employee_data.employees
  • employee_data.departments

E que seu project id seja algo como:

meu-projeto-123

Nos exemplos abaixo, substitua:

[your-project-id]

pelo id do seu projeto.


🔗 O que é um JOIN?

JOIN é uma cláusula SQL usada para combinar linhas de tabelas diferentes com base em uma condição.

Existem quatro JOINs principais que você precisa dominar:

JOINO que retorna
INNER JOINApenas registros que possuem correspondência nas duas tabelas
LEFT JOINTodos da esquerda + correspondentes da direita
RIGHT JOINTodos da direita + correspondentes da esquerda
FULL OUTER JOINTodos de ambas as tabelas, correspondentes ou não

🧠 Estrutura das tabelas (exemplo mental)

Tabela employees

employee_idnameroledepartment_id
1AnaDesigner10
2BrunoDeveloper20
3CarlosAnalystNULL

Tabela departments

department_idname
10Marketing
20Tecnologia
30Financeiro

Perceba que:

  • Carlos não tem departamento
  • O departamento Financeiro não tem funcionário

Isso é perfeito para entender as diferenças entre os JOINs.


✅ Exemplo 1 — INNER JOIN

O INNER JOIN retorna somente os registros que possuem correspondência nas duas tabelas.

SELECT
  employees.name AS employee_name,
  employees.role AS employee_role,
  departments.name AS department_name
FROM
  `[your-project-id].employee_data.employees` AS employees
INNER JOIN
  `[your-project-id].employee_data.departments` AS departments
ON
  employees.department_id = departments.department_id;

Resultado esperado

employee_nameemployee_roledepartment_name
AnaDesignerMarketing
BrunoDeveloperTecnologia

❌ Carlos não aparece (não tem departamento) ❌ Financeiro não aparece (não tem funcionário)


🟦 Exemplo 2 — LEFT JOIN

O LEFT JOIN retorna todos os registros da tabela da esquerda (employees) e os correspondentes da direita.

SQL
SELECT
  employees.name AS employee_name,
  employees.role AS employee_role,
  departments.name AS department_name
FROM
  `[your-project-id].employee_data.employees` AS employees
LEFT JOIN
  `[your-project-id].employee_data.departments` AS departments
ON
  employees.department_id = departments.department_id;

Resultado esperado

employee_nameemployee_roledepartment_name
AnaDesignerMarketing
BrunoDeveloperTecnologia
CarlosAnalystNULL

✔ Todos os funcionários aparecem ✔ Mesmo quem não tem departamento


🟥 Exemplo 3 — RIGHT JOIN

O RIGHT JOIN retorna todos os registros da tabela da direita (departments) e os correspondentes da esquerda.

SQL
SELECT
  employees.name AS employee_name,
  employees.role AS employee_role,
  departments.name AS department_name
FROM
  `[your-project-id].employee_data.employees` AS employees
RIGHT JOIN
  `[your-project-id].employee_data.departments` AS departments
ON
  employees.department_id = departments.department_id;

Resultado esperado

employee_nameemployee_roledepartment_name
AnaDesignerMarketing
BrunoDeveloperTecnologia
NULLNULLFinanceiro

✔ Todos os departamentos aparecem ✔ Mesmo sem funcionários


🟪 Exemplo 4 — FULL OUTER JOIN

O FULL OUTER JOIN é a união do LEFT com o RIGHT.

Ele retorna todos os registros de ambas as tabelas, correspondentes ou não.

SQL
SELECT
  employees.name AS employee_name,
  employees.role AS employee_role,
  departments.name AS department_name
FROM
  `[your-project-id].employee_data.employees` AS employees
FULL OUTER JOIN
  `[your-project-id].employee_data.departments` AS departments
ON
  employees.department_id = departments.department_id;

Resultado esperado

employee_nameemployee_roledepartment_name
AnaDesignerMarketing
BrunoDeveloperTecnologia
CarlosAnalystNULL
NULLNULLFinanceiro

Aqui você enxerga 100% do cenário do banco.


🧩 Quando usar cada JOIN na vida real

SituaçãoJOIN ideal
Quero apenas dados consistentes entre tabelasINNER JOIN
Quero listar todos os usuários, mesmo incompletosLEFT JOIN
Quero listar todas as categorias, mesmo vaziasRIGHT JOIN
Quero auditar inconsistências do bancoFULL OUTER JOIN

💡 Insight importante (muito usado em análise de dados)

O FULL OUTER JOIN é excelente para:

  • Descobrir registros órfãos
  • Validar integridade de dados
  • Encontrar erros de modelagem
  • Fazer auditorias de base

Exemplo prático para encontrar funcionários sem departamento:

SELECT *
FROM `[your-project-id].employee_data.employees` e
LEFT JOIN `[your-project-id].employee_data.departments` d
ON e.department_id = d.department_id
WHERE d.department_id IS NULL;

🏁 Conclusão

Dominar JOIN é fundamental para qualquer pessoa que trabalha com:

  • SQL
  • BigQuery
  • Analytics
  • Engenharia de dados
  • Marketing data-driven
  • BI

Sem JOIN, você apenas consulta tabelas. Com JOIN, você entende o banco de dados como um sistema integrado.

E é exatamente aí que a análise de dados começa a ficar realmente poderosa.

Fique ligado

Seja um Expert em Growth

Receba insights práticos sobre marketing, dados, performance e tecnologia direto no seu email.