Условие работает нормально; вы просто не понимаете разницы между одним строковым значением, содержащим запятую, и несколькими значениями. Желаемое logi c лучше всего записать как:
IF EXISTS (select * from dbo.Params where Value in ('Z111', 'P111'))
Если это передается как значение, вы можете либо разделить строку:
IF EXISTS (select * from dbo.Params where Value in (select value from string_split(@param))
Или используйте LIKE
:
IF EXISTS (select * from dbo.Params where ',' + @param + ',' LIKE '%,' + Value + ',%')