Retrieving a list of patients that have visited certain hospitals
Using IN tends to have a performance hit in most DBMS, as it typically results in a row by row lookup.  As a rule of thumb, I don't use a subquery if I can express the relationship in a simple join.  I also try to stay away from DISTINCT wherever possible.  When I need to dedup records, I'll typically use a GROUP BY and return the count of records, since it's often useful in my field (reporting) and/or for QA.  For example, the below query should return the patients you are looking for, with the added benefit of how many other hospitals were visited.  You could also do a plus one for total hospitals visited (including "Green").  That may or may not be useful for your needs.

SELECT
    green.PatientID,
    COUNT(1) AS OtherHospitals,
    COUNT(1)+1 AS TotalHospitals
FROM
    Patients green
JOIN
    Patients other ON other.PatientID = green.PatientID
WHERE
    green.Facility = 'Green'
    AND other.Facility &lt;&gt; 'Green'
GROUP BY 
    green.PatientID