Na das "in" ist ja nicht die schnellste Methode um Daten einzugrenzen, da wunderte mich Dein Zeitproblem überhaupt nicht.
So pauschal kann man das nicht sagen:
SQL-Server verwendet den gleichen Queryplan wie bei einem Join
Da fällt mir noch etwas ein:
Im SSMS siehst Du die ersten Zeilen manchmal sofort, aber es kann sein, das die
Query trotzdem ewig braucht, bis sie *fertig* ist. In Delphi wartest Du, bis alle Daten da sind.
Prüfe also im SSMS, wie lange es dauert, bis die
Query fertig ist. Ich würde einen Index auf die Pos-Nr setzen und das Order-by erst einmal weglassen. Sortieren kannst Du auch im Client.