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