La chiave per eseguire il debug di situazioni come queste è eseguire la subquery / vista inline da sola per vedere qual è l'output:
SELECT TOP 1
dm.marker_value,
dum.profile_id
FROM DPS_USR_MARKERS dum (NOLOCK)
JOIN DPS_MARKERS dm (NOLOCK) ON dm.marker_id= dum.marker_id
AND dm.marker_key = 'moneyBackGuaranteeLength'
ORDER BY dm.creation_date
Eseguendolo, vedresti che il profile_idvalore non corrisponde al u.idvalore di u162231993, il che spiegherebbe il motivo per cui tutti i mbgriferimenti sarebbero tornatinull (grazie al join sinistro; non otterrai nulla se fosse un join interno).
Ti sei codificato in un angolo usando TOP, perché ora devi modificare la query se vuoi eseguirla per altri utenti. Un approccio migliore sarebbe:
SELECT u.id,
x.marker_value
FROM DPS_USER u
LEFT JOIN (SELECT dum.profile_id,
dm.marker_value,
dm.creation_date
FROM DPS_USR_MARKERS dum (NOLOCK)
JOIN DPS_MARKERS dm (NOLOCK) ON dm.marker_id= dum.marker_id
AND dm.marker_key = 'moneyBackGuaranteeLength'
) x ON x.profile_id = u.id
JOIN (SELECT dum.profile_id,
MAX(dm.creation_date) 'max_create_date'
FROM DPS_USR_MARKERS dum (NOLOCK)
JOIN DPS_MARKERS dm (NOLOCK) ON dm.marker_id= dum.marker_id
AND dm.marker_key = 'moneyBackGuaranteeLength'
GROUP BY dum.profile_id) y ON y.profile_id = x.profile_id
AND y.max_create_date = x.creation_date
WHERE u.id = 'u162231993'
Con ciò, puoi modificare il idvalore nella whereclausola per controllare i record per qualsiasi utente nel sistema.