Your query is fine. It can be written using a
SELECT p.PersonID, md.DateVal FROM Person p JOIN MissingDates md ON md.DateVal >= p.StartDate AND md.DateVal <= p.EndDate;
Your results suggest that you want equality.
Note: The above is going to generate the same execution plan as your query. It gets rid of the
CROSS JOIN, but that will probably not affect performance.
CLICK HERE to find out more related problems solutions.