How to JOIN with missing rows?
To perform the join without matching rows on the dates you need to use an outer join. The challenge here is going to be propagating down the nearest rates as you are missing various rates in table2 both ordered ascending and descending. I don't have much experience with MySQL so I'm not sure if Window Functions are available? I believe this will help you accomplish your goal.

ISNULL(ISNULL(rate, (SELECT TOP (1) rate FROM table2 AS t2 
WHERE a.date &lt;= t2.date)), 
(SELECT TOP (1) rate FROM table2 AS t2 
 WHERE a.date &gt;= t2.date 
 ORDER BY t2.date DESC))

SELECT a.[date],
       b.[date],
       a. price, 
       b.rate, 
       price/rate AS adjusted,
       ISNULL(ISNULL(rate, 
(SELECT TOP (1) rate FROM table2 AS t2 
 WHERE a.date &lt;= t2.date)), 
(SELECT TOP (1) rate FROM table2 AS t2 
 WHERE a.date &gt;= t2.date ORDER BY t2.date DESC))
FROM table1 AS a
LEFT OUTER JOIN table2 AS b
    ON a.[date] = b.[date];