SQL query for something like "not having"?
I think a simpler way of doing this is:
select software
from HostSoftware hs
group by software
having max(case when software = 'Title2' then 1 else 0 end) = 0
This does not require a correlated subquery. And, it should result in better execution plans on most databases.
SELECT Host FROM HostSoftware
WHERE NOT EXISTS (
SELECT * FROM HostSoftware AS InnerSoftware
WHERE InnerSoftware.Host = HostSoftware.Host AND InnerSoftware.Software ='Title2'
)