Como fazer join entre tabelas sem chaves estrangeiras?

Podemos unir tabelas no SQL sem chaves estrangeiras utilizando colunas comuns, funções e técnicas alternativas como JOINs baseados em valores semelhantes.

Como fazer JOIN entre tabelas sem chaves estrangeiras?

Normalmente, JOINs no SQL utilizam chaves primárias e estrangeiras para conectar tabelas. No entanto, em alguns casos, podemos precisar unir tabelas que não possuem chaves estrangeiras explícitas.

Usando JOIN baseado em colunas comuns

Se houver uma coluna que represente um vínculo entre as tabelas, podemos utilizá-la para fazer o JOIN:

SELECT clientes.nome, pedidos.id, pedidos.valor 
FROM clientes 
INNER JOIN pedidos ON clientes.email = pedidos.email_cliente;

Aqui, estamos conectando as tabelas clientes e pedidos através do campo email, assumindo que ele pode ser um identificador único.

Usando LIKE para unir registros com padrões semelhantes

Se os valores das colunas forem parecidos, podemos utilizar LIKE:

SELECT usuarios.nome, logs.acao 
FROM usuarios 
INNER JOIN logs ON logs.descricao LIKE CONCAT('%', usuarios.nome, '%');

Isso pode ser útil para bases de dados não normalizadas.

Criando uma chave temporária para JOIN

Se não houver colunas comuns diretas, podemos criar uma relação temporária:

SELECT u.nome, c.empresa 
FROM usuarios u 
INNER JOIN clientes c ON LEFT(u.documento, 8) = LEFT(c.cnpj, 8);

Isso permite unir tabelas onde apenas parte dos valores são idênticos.

Quando evitar JOINs sem chaves estrangeiras?

  • Se os dados não forem bem estruturados, pode haver erros e inconsistências.
  • JOINs sem chaves explícitas podem ser mais lentos, especialmente se forem aplicadas funções em colunas.
  • Sempre que possível, melhore a modelagem do banco para incluir relacionamentos claros.

JOINs sem chaves estrangeiras são comuns em bancos de dados legados ou sistemas onde a normalização não foi aplicada corretamente. Em muitos casos, é necessário unir tabelas utilizando colunas textuais, IDs inconsistentes ou até mesmo partes de strings. Técnicas como LIKE, SUBSTRING() e SOUNDEX() podem ser úteis para estabelecer relações aproximadas entre tabelas. No entanto, sempre que possível, é recomendável revisar a modelagem dos dados para evitar esse tipo de necessidade e garantir melhor desempenho e integridade nas consultas.

Algumas aplicações:

  • Unir dados de sistemas diferentes sem um identificador comum
  • Relacionar registros de tabelas legadas sem normalização
  • Encontrar conexões aproximadas entre valores semelhantes
  • Combinar dados textuais para análise sem estrutura rígida
  • Realizar consultas exploratórias em bancos de dados não normalizados

Dicas para quem está começando

  • Se possível, normalize o banco e crie chaves estrangeiras
  • Utilize LIKE e SUBSTRING() apenas se não houver alternativas melhores
  • Evite funções em colunas dentro do JOIN, pois podem impactar a performance
  • Se precisar unir bases diferentes, considere criar índices temporários
  • Para grandes volumes de dados, prefira criar tabelas intermediárias com identificadores comuns

Contribuições de Fernando Albuquerque

Compartilhe este tutorial: Como fazer join entre tabelas sem chaves estrangeiras?

Compartilhe este tutorial

Continue aprendendo:

Como contar quantos registros existem em cada grupo de um JOIN?

Podemos contar quantos registros existem em cada grupo de um JOIN no SQL utilizando GROUP BY com COUNT(), organizando os dados de forma estruturada.

Tutorial anterior

Como verificar quais registros não possuem correspondência entre tabelas?

Podemos identificar registros sem correspondência no SQL utilizando LEFT JOIN com WHERE NULL, NOT EXISTS e NOT IN.

Próximo tutorial