Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal,
Alguém sabe me dizer se uma instrução NOT EXISTS é realizada com base em uma verificação inicial que não se atualiza ao longo da execução quando existe INNER JOIN no critério da consulta? Explico:
1 - Tenho uma tabela onde existem 2 registros iguais.
2 - Preciso transferir para a tabela principal estes registros, mas sem a duplicidade. Uso o NOT EXISTS para isso.
Se a consulta é simples, apenas com uma tabela, funciona normalmente. Se uso um INNER JOIN, não funciona.
O código é:
INSERT INTO veiculo
SELECT DISTINCT
cl.id,
tv.chassi,
tv.placa,
tv.estado,
tv.familia,
tv.modelo,
tv.ano_fab,
tv.ano_mod,
tv.cor,
tv.combustivel,
tv.acessorio,
tv.taxi,
tv.data_compra,
tv.inclusao,
tv.incluso_por,
tv.alteracao,
tv.alterado_por,
tv.mediador_posvenda,
tv.mediador_venda
FROM cliente cl INNER JOIN temp_veiculo tv
ON cl.cpf_cnpj = tv.cpf_cnpj
WHERE
cl.id_concessao = @IdConcessao AND
NOT EXISTS
(
SELECT
vcl.id
FROM cliente cln
INNER JOIN veiculo vcl ON cln.id = vcl.id_cliente
WHERE
cln.id_concessao = @IdConcessao AND
vcl.chassi = tv.chassi
)
Consideremos que a tabela temp_veiculo tem registros duplicados (carros com chassi igual). O código acima gera o seguinte resultado:
É como se o resultado do NOT EXISTS só fosse gerado uma vez e não fosse mais atualizado durante a instrução, causando a falsa resposta de que o chassi em questão ainda não existe, quando na verdade já foi inserido.
Onde estou errando?
Desde já, obrigado pela ajuda.
Carregando comentários...