[firebase-br] Problema com operador IN

Tecnobyte Informática temp2 em tecnobyte.com.br
Seg Abr 2 16:35:05 -03 2012


Você tem razão. Mudei como abaixo e funcionou (mas ficou super lento!):

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

Vou usar a versão com EXISTS mesmo. Mas fiquei intrigado com este 
comportamento do Firebird. Muito estranho!

Atenciosamente.

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

-----Mensagem Original----- 
From: Daniel Chiovitti
Sent: Monday, April 02, 2012 3:05 PM
To: FireBase
Subject: Re: [firebase-br] Problema com operador IN

Boa tarde.

O EXISTS não vai considerar os valores nulos.
Faz um teste com o IN adicionando no where uma condição para não retornar
nulos, isso provavelmente está acontecendo por causa de tipos UNKNOW.

2012/4/2 Tecnobyte Informática <temp2 em tecnobyte.com.br>

> 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
>
>
> ______________________________**________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/**artigo.php?id=1107<http://www.firebase.com.br/fb/artigo.php?id=1107>
> Para consultar mensagens antigas: 
> http://firebase.com.br/**pesquisa<http://firebase.com.br/pesquisa>
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 





Mais detalhes sobre a lista de discussão lista