Using GETDATE() in a variable returns 0 rows
The problem is that GETDATE() returns a DATETIME. So the WHERE condition checks if any of the values in that column is equal to that exact date and time (+3 days).

You need to strip the time part, either by casting or by using a date variable:

declare @_NextAppt as datetime ;        -- use same type as the column

set @_NextAppt = dateadd(day, 3, cast(getdate() as date)) ;
      -- strips the time from getdate(),
      -- adds 3 days and
      -- does an implicit conversion to the variable's type (datetime)


We also don't know the type of the column. It would be good to use inclusive-exclusive conditions when comparing datetime values. The query below will work independent of whether your column is DATE or DATETIME or DATETIME2:

select distinct PatID, StaffID  
from dbo.Appointments    
where PatID is not null 
  and ApptDate &gt;= @_NextAppt
  and ApptDate  &lt; dateadd(day, 1, @_NextAppt) ;


If the column is DATE, you could of course use an equality condition:

---
where PatID is not null 
  and ApptDate = @_NextAppt ;


Necessary links to blog posts about good (and bad) practices with dates (note how I replaced the shorthand dd to the full day datepart when using the DATEADD() function above):


Bad Habits to Kick : Using shorthand with date/time operations
Bad habits to kick : mis-handling date / range queries
What do BETWEEN and the devil have in common?