[RESOLVIDO] Diferença entre os estilos de relacionamento

Boa tarde pessoal, gostaria de saber as principais diferença tecnicas entre dois estilos de relacionamento entre tabelas. Comecei a estudar banco de dados e vi que existe o inner join e left join para realizar relacionamentos entre tabelas, so que também vi que da para relacionar várias tabelas simplesmente desta forma, ex:

select 
c.*
from 
caixa c,
caixa_lancamento cl,
usuario usu
where
cl.caixa_codigo = c.codigo
and
usu.codigo = c.usuario_codigo 
and
c.codigo = $P{codcaixa}

Achei este modelo bem mais simples, tem alguma grande direfença entre fazer assim ou com inner join e left join? problema de performace? agradeço desde já.

OBS: Este estilo de relacionamento funciona tanto no Oracle quanto no MySQL.

Considere as tabelas CLIENTE, NF e PRODUTO.
A relação entre CLIENTE e NF é de 1 : N (cada cliente pode ter várias NF e cada NF pertence a um único cliente).
A relação entre NF e PRODUTO é de N : N, ou seja, cada produto pode constar em várias NF e cada NF pode ter vários produtos. Isso nos leva a uma tabela associativa, que chamarei de ITEM_NF.

As tabelas são

CLIENTE
ID_CLIENTE
NOME

PRODUTO
ID_PRODUTO
NOME
PRECO

NF
ID_NF
SERIE
NUMERO
ID_CLIENTE

ITEM_NF
ID_ITEM_NF
ID_PRODUTO
ID_NF
QUANTIDADE_PRODUTO

Bem simples, certo?

Agora, se eu quero buscar todos os clientes e o número das NFs associadas a ele, faço a seguinte query

SELECT
c.nome, nf.numero
FROM CLIENTE c
INNER JOIN NF nf
ON c.ID_CLIENTE = nf.ID_CLIENTE;

O inner join vai trazer todos os resultados onde um cliente possua uma NF (exista um registro na NF contendo o ID_CLIENTE).

Agora, se eu quiser trazer todos os clientes, independente de ter NF associada, mas, se tiver, trazer o número da NF, faço:

SELECT
c.nome, nf.numero
FROM CLIENTE c
LEFTJOIN NF nf
ON c.ID_CLIENTE = nf.ID_CLIENTE;

E, assim, terei todos os clientes, mesmo que este não possua nenhuma NF.

Ou seja, o INNER JOIN é a consulta na qual eu trago somente os registros existentes em todas as tabelas envolvidas.
O LEFT JOIN é semelhante, salvo que, se houver registros na tabela à esquerda (por isso o LEFT), estes serão trazidos, se não, apenas os que estiverem na tabela à direita.

Usando esse seu exemplo, poderia substituir a associação INNER JOIN por:

    select 
    c.nome, nf.numero
    from 
    CLIENTE c,
    NF nf
    where
    nf.ID_CLIENTE = c.IDCLIENTE;

Existe alguma desvantagem em usar desta forma?
Pergunto isso pois trabalho com uma equipe que tem como normas internar usar este padrão que te mostrei, eles não usam inner join ou leftjoin. Até o momento não senti alguma restrição de produtividade devido a isso, mas fiquei curioso porque realmente desde a faculdade estudei esta forma que vc explicou.

Sim, essa abordagem gera o que chamamos de produto cartesiano.
A busca com os JOIN é menos onerosa.
É óbvio que, para pesquisas “pequenas”, isso não faz diferença, agora, quando falamos da casa de milhões de registros, fica bem mais evidente.

Muito obrigado pela ajuda, já me deu um norte, vlw