[firebase-br] Resultado com INNER JOIN x LEFT JOIN

Jeferson Oliveira jefersonfoliveira em gmail.com
Qui Jun 22 10:23:22 -03 2006


Marcos,

Ao indicar um join com Left será realiza, para cada valor da tabela à
esquerda, uma pesquisa na tabela que está à direita e, portanto, somente à
tabela à direita precisa ser indexada. O que explica a utilização do índice
TBTIPOMOVIMENTOSAIDA_PK no segundo caso.
Inner e Right join, fazem o oposto: para cada valor da direita é feita uma
pesquisa na tabela à esquerda.
Já o índice TBMOVESTOQUE_DATAPRODUTO só foi utilizado devido ás condições
definidas na claúsula WHERE.

Ese comportamento é geral, e não específico do seu banco de dados.
Abaixo a sentença que utilizei para confirmar essa afirmação:

select Detalhe.RDB$CONSTRAINT_NAME as NomeFK,
       idxDetalhe.RDB$FIELD_NAME as CampoDetalhe
from RDB$RELATION_CONSTRAINTS Detalhe
left join RDB$INDEX_SEGMENTS idxDetalhe
    on (idxDetalhe.RDB$INDEX_NAME = Detalhe.RDB$INDEX_NAME)

Abraço!
Jeferson Oliveira



Mais detalhes sobre a lista de discussão lista