Logical optimization of joins and selections
Yes, there are cases where applying the filter after the join is preferable. But they are rare.

Consider this example:

SELECT ...
FROM a
INNER JOIN b
  ON b.key = a.key
WHERE a.some_string LIKE '%foo%'


Now, assume that very few rows in a has a matching row in b. It is now faster to first join and remove the rows from a that does not match and then apply the expensive string filter.