[firebase-br] Problema com operador IN

Tecnobyte Informática temp2 em tecnobyte.com.br
Seg Abr 2 15:33:27 -03 2012


Boa tarde

No meu entender os comandos abaixo são equivalentes e portanto deveriam 
retornar o mesmo conteúdo. Porém quando uso o comando com IN conforme abaixo 
não retorna nenhuma linha, enquanto que ao usar EXISTS exatamente como 
abaixo retorna 74 linhas.

-- Retorna ZERO linhas:

SELECT * FROM Cliente
WHERE NOT Cliente.Id IN
  (SELECT Venda.Cliente_Id FROM Venda)

-- Também retorna ZERO linhas (usei um par de parêntesis a mais):

SELECT * FROM Cliente
WHERE NOT (Cliente.Id IN
  (SELECT Venda.Cliente_Id FROM Venda))

-- Também retorna ZERO linhas (mudei o NOT para imediatamente antes do IN):

SELECT * FROM Cliente
WHERE Cliente.Id NOT IN
  (SELECT Venda.Cliente_Id FROM Venda)

-- Retorna 74 linhas:

SELECT * FROM Cliente
WHERE NOT EXISTS
  (SELECT * FROM Venda WHERE Venda.Cliente_Id = Cliente.Id)

Não consegui descobrir porque não funciona com IN e funciona com EXISTS, uma 
vez que ao meu ver são comandos equivantes neste caso. Alguém pode me 
ajudar?

Atenciosamente.

Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br





Mais detalhes sobre a lista de discussão lista