• You just need to invert the logic.

    DECLARE

    @StartDate DATE

    ,@EndDate DATE;

    set @StartDate = DATEADD( day,-30, getdate());

    set @EndDate = GETDATE();

    SELECT *

    FROM(

    SELECT p.Name, d.Name AS Door

    FROM access.Personnel p

    INNER JOIN access.PersonnelClearancePair pcp ON p.ObjectID = pcp.PersonnelID

    INNER JOIN access.Clearance c ON pcp.ClearanceID = c.ObjectID

    INNER JOIN access.ClearanceItem ci ON c.ObjectID = ci.ClearanceID

    INNER JOIN access.ScheduleItem si ON ci.ScheduleID = si.ObjectID

    INNER JOIN access.Door d ON ci.DoorID = d.ObjectID

    INNER JOIN access.Credential cr ON cr.PersonnelId = p.ObjectID

    WHERE d.Name LIKE 'DataCenter%'

    AND cr.Expired IS NULL

    AND cr.Disabled = 0

    AND cr.Stolen = 0

    AND cr.Lost = 0

    UNION

    SELECT p.Name, d.Name AS Door

    FROM access.Personnel p

    INNER JOIN access.PersonnelClearancePair pcp ON p.ObjectID = pcp.PersonnelID

    INNER JOIN access.Clearance c ON pcp.ClearanceID = c.ObjectID

    INNER JOIN access.ClearanceItem ci ON c.ObjectID = ci.ClearanceID

    INNER JOIN access.ScheduleItem si ON ci.ScheduleID = si.ObjectID

    INNER JOIN access.Group_ g ON ci.DoorGroupID = g.ObjectID

    INNER JOIN access.GroupMember gm ON g.ObjectID = gm.GroupID

    INNER JOIN access.Door d ON d.ObjectID = gm.TargetObjectID

    INNER JOIN access.Credential cr ON cr.PersonnelId = p.ObjectID

    WHERE d.Name LIKE 'DataCenter%'

    AND cr.Expired IS NULL

    AND cr.Disabled = 0

    AND cr.Stolen = 0

    AND cr.Lost = 0

    AND g.GroupType LIKE N'%Door%'

    OR g.GroupType LIKE N'%Door%'

    AND g.Name LIKE N'All Doors Group'

    AND cr.ExpirationDateTime > GETDATE()

    ) p

    WHERE NOT EXISTS (

    SELECT PrimaryObjectName as name

    ,MessageType as admitted

    ,MessageUTC as access_time

    ,SecondaryObjectName as door

    FROM Journal.dbo.JournalLog jl

    WHERE SecondaryObjectName like 'DataCenter%'

    AND MessageUTC between @StartDate and @EndDate

    AND jl.PrimaryObjectName = p.Name

    AND jl.SecondaryObjectName = p.Door);

    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