Use LEFT OUTER JOIN, but don't cast datetimes in any data table to dates to do comparisons; instead, use a range check.
Here's a sample join for the tables you've described:
SELECT ...
FROM dbo._dates d
INNER JOIN (
SELECT
DATEADD(DAY, DATEDIFF(DAY, 0, MIN(starttime)), 0) AS start_date,
DATEADD(DAY, DATEDIFF(DAY, 0, MAX(starttime)) + 1, 0) AS end_date
FROM dbo.cannedbackupjobs
) AS date_range ON
d.date >= date_range.start_date AND
d.date < date_range.end_date
LEFT OUTER JOIN cannedbackupjobs dbj ON
dbj.starttime >= d.date AND
dbj.starttime < DATEADD(DAY, 1, d.date)
--use the WHERE below instead of the INNER JOIN above if you want to
--report on just a specific date range that you specify
--WHERE d.date >= @start_date AND d.date < @end_date
SQL DBA,SQL Server MVP(07, 08, 09) A socialist is someone who will give you the shirt off *someone else's* back.