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);