Here are 2 queries, if you are able to find the difference between them, then you will understand why your query is returning 'Bad' value:
SELECT
CASE
WHEN 'DLV' IN ('DLV, DLC')
THEN 'GOOD'
ELSE 'BAD' END
SELECT
CASE
WHEN 'DLV' IN ('DLV', 'DLC')
THEN 'GOOD'
ELSE 'BAD' END
Explanation:
'DLV,DLC' - is one value.
'DLV', 'DLC' - two values.
So, turn 'DLV,DLC' into several individual values, you need to use splitter function.
(I used Jeff Moden's splitter - DelimitedSplit8K)
DECLARE @CARACS VARCHAR(8000) = 'DLV,DLC'
SELECT
CASE
WHEN 'DLV' IN (select * from dbo.DelimitedSplit8K(@CARACS,','))
THEN 'GOOD'
ELSE 'BAD'
END