I think the difference is probably that in the primary query you are excluding the cases where Crd Number is null, but in the subquery you are not. I don't have Access installed to be able to test, but I would bet it will work if you add to the subquery where clause.
sp.CRD_NUMBER is not null and dtp.CRD_NUMBER is not null
I suspect that the function CStr() is having a problem with null values, but then again, I can't test this to see if that would make a difference.