• Maybe this is a simpler solution:

    SELECT *
    FROM dbo.Candidate AS c
    WHERE c.candidate_id NOT IN(
            SELECT c.candidate_id
            FROM dbo.Candidate AS c
            CROSS JOIN dbo.Skill AS s
            LEFT JOIN dbo.CandidateSkills AS cs ON c.candidate_id = cs.candidate_id AND s.skill_id = cs.skill_id
            WHERE cs.candidate_id IS NULL);

    It could be used with an additional condition to get specific skills

    SELECT *
    FROM dbo.Candidate AS c
    WHERE NOT EXISTS(
            SELECT 1
            FROM dbo.Candidate AS ci
            CROSS JOIN dbo.Skill AS s
            LEFT JOIN dbo.CandidateSkills AS cs ON ci.candidate_id = cs.candidate_id AND s.skill_id = cs.skill_id
            WHERE cs.candidate_id IS NULL
            AND ci.candidate_id = c.candidate_id
            AND s.skill_id IN(1,2,4)); --This could use a multiple valued parameter from SSRS

    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