• Here are 2 other options.

    WITH Contacts AS(

    SELECT INS.INSPNO, CNT.FIRSTNAME, CNT.LASTNAME, CNT.CAPACITY,

    ROW_NUMBER() OVER( PARTITION BY INS.INSPNO ORDER BY CASE WHEN Capacity = 'Contractor' THEN -1 ELSE INS.INSPNO END DESC) rn

    FROM @inspection INS

    INNER JOIN @INSPECTIONCONTACT CNT

    ON INS.INSPNO = CNT.INSPNO

    )

    SELECT INSPNO, FIRSTNAME, LASTNAME

    FROM Contacts

    WHERE CAPACITY <> 'Contractor'

    OR rn = 1;

    SELECT INS.INSPNO, CNT.FIRSTNAME, CNT.LASTNAME

    FROM @inspection INS

    INNER JOIN @INSPECTIONCONTACT CNT

    ON INS.INSPNO = CNT.INSPNO

    WHERE CNT.CAPACITY <> 'Contractor'

    UNION ALL

    SELECT INS.INSPNO, CNT.FIRSTNAME, CNT.LASTNAME

    FROM @inspection INS

    INNER JOIN @INSPECTIONCONTACT CNT

    ON INS.INSPNO = CNT.INSPNO

    WHERE INS.INSPNO IN ( SELECT C.INSPNO FROM @INSPECTIONCONTACT C

    GROUP BY C.INSPNO

    HAVING MAX(C.CAPACITY) = 'Contractor'

    AND MIN(C.CAPACITY) = 'Contractor')

    Luis C.
    General Disclaimer:
    Are you seriously taking the advice and code from someone from the internet without testing it? Do you at least understand it? Or can it easily kill your server?

    How to post data/code on a forum to get the best help: Option 1 / Option 2