Бит @title = '""' OR ...
- это проблема.
Во время компиляции он не знает, действительно ли @title
будет содержать значение ""
и, следовательно, должен возвращать все строки или нет.
Вы можете попробовать добавить OPTION(RECOMPILE)
к запросу, чтобы он перекомпилировался после присвоения переменной, или просто разбить его на два случая.
IF @title = '""'
SELECT *
FROM papers
ELSE
SELECT *
FROM papers p
WHERE ( CONTAINS(p.name, @title) )