Sometimes - reformatting the query to see what it is actually doing will help when trying to understand what it is actually doing.
The GREATEST function here is getting the highest (max) value from either JOBX.FDT or HIRE_DT or REHIRE_DT. The NVL function forces any null values to be returned with the lowest date as '0001-01-01'.
Using @gbritton method with CROSS APPLY:
Select
, PERS.EMPLID
--, GREATEST(NVL(( Select max(JOBX.FDT)
-- From Job JOBX
-- Where JOBX.EMPLID = PERS.EMPLID
-- And JOBX.ACTION = 'XFR'
-- And JOBX.ACTION_REASON = 'TAF'), '0001-01-01')
-- , NVL(EMPL.HIRE_DT,'0001-01-01')
-- , NVL(EMPL.REHIRE_DT,'0001-01-01'))
-- ) As ADJ_HIRE_DATE ---SQL
, adj.adj_hire_date
From PERSON_DATA PERS
Cross Apply (Select max(v.max_date) As adj_hire_date
From (
Values (isnull(Select max(jobx.FDT)
From Job jobx
Where jobx.empid = pers.emplid
And jobx.action = 'XFR'
And jobx.action_reason = 'TAF'), 0) -- default to 1900-01-01
, (isnull(empl.hire_dt, 0))
, (isnull(empl.rehire_dt, 0))
) As v(max_date)) As adj
And defaulting to the zero date in SQL Server (1900-01-01) we can do something like the above. To simplify the values statement, we can use another cross apply:
Select
, PERS.EMPLID
--, GREATEST(NVL(( Select max(JOBX.FDT)
-- From Job JOBX
-- Where JOBX.EMPLID = PERS.EMPLID
-- And JOBX.ACTION = 'XFR'
-- And JOBX.ACTION_REASON = 'TAF'), '0001-01-01')
-- , NVL(EMPL.HIRE_DT,'0001-01-01')
-- , NVL(EMPL.REHIRE_DT,'0001-01-01'))
-- ) As ADJ_HIRE_DATE ---SQL
, adj.adj_hire_date
From PERSON_DATA PERS
Cross Apply (Select max(jobx.FDT) As FDT
From Job jobx
Where jobx.empid = pers.emplid
And jobx.action = 'XFR'
And jobx.action_reason = 'TAF'
) As jobx
Cross Apply (Select max(v.max_date) As adj_hire_date
From (
Values (isnull(jobx.FDT), 0) -- default to 1900-01-01
, (isnull(empl.hire_dt, 0))
, (isnull(empl.rehire_dt, 0))
) As v(max_date)) As adj