Я согласен с keithwarren, но всегда буду добавлять предложение ORDER BY в запрос. Затем вы можете быть уверены в том, в каком порядке объединяются значения.
Кроме того, COALESCE для замены значения NULL на '' будет эффективно давать пустые строки. Я не знаю, хотите вы их или нет, но если вместо этого просто отфильтруйте в предложении WHERE ...
Наконец, у вас, похоже, есть временная таблица с интересующими вас идентификаторами. Эта таблица может быть просто включена в JOIN для фильтрации исходной таблицы ...
DELCARE @output VARCHAR(8000)
SET @output = ''
SELECT
@output = @output + [Categories].Description + '<br/>'
FROM
Categories
INNER JOIN
#vals
ON #vals.val = [Categories].ID
WHERE
[Categories].Description IS NOT NULL
ORDER BY
[Categories].Description