Prawdopodobnie dzieje się tak dlatego, że w przypadku parametru optymalizator nie może wiedzieć, że wartość nie jest pusta, więc musi stworzyć plan, który zwróci poprawne wyniki, nawet jeśli tak jest. Jeśli masz SQL Server 2008 SP1, możesz spróbować dodać OPTION(RECOMPILE)
do zapytania.