Resultado inesperado no sql

Firebird

12/10/2006

Por que este codigo:
SELECT *
FROM CONSULTA C1
WHERE
C1.ID IN
(
´1´
)


Gera um resultado diferente deste:
SELECT *
FROM CONSULTA C1
WHERE
C1.ID IN
(
SELECT FIRST 1 C2.ID
FROM CONSULTA C2
WHERE
C2.PRONTUARIO=´5656´
)


Se o resultdo de:
SELECT FIRST 1 C2.ID
FROM CONSULTA C2
WHERE
C2.PRONTUARIO=´5656´

É igual a 1?

Alguem consegue entender o pq deste resultado?


Lorde_morte.

Lorde_morte.

Curtidas 0

Respostas

Lorde_morte.

Lorde_morte.

12/10/2006

Achei a resposta no Releasenotes do FB 1.5.108 (pág.29) e descobri isso :

2. Queries como esta: ... WHERE F1 IN ( SELECT FIRST 5 F2 FROM TABLE2 ORDER BY 1 DESC ) não funcionam como esperado, por causa da otimização processada atualmente pelo servidor que trata os predicados correlacionados WHERE...IN (SELECT...) em predicados correlacionados EXISTS. É óbvio que neste contexto FIRST N não faz qualquer sentido: WHERE EXISTS ( SELECT FIRST 5 TABLE2.F2 FROM TABLE2 WHERE TABLE2.F2 = TABLE1.F1 ORDER BY 1 DESC )


Tracando a pergunta.
Como contornar este defeito?


GOSTEI 0
POSTAR