The ON match builds the outer-join rows first; a WHERE-style filter can drop padded rows afterward.
join first, filter after
Compare row counts
The outer join has 5 rows before the filter and 3 rows after the right-side not-NULL filter.
after filter=3
Outer-join examples are tiny finite-table transforms; SQL dialect completeness, type coercion, optimizer behavior, execution cost, indexing, and database-product claims are out of scope.
Read kept flags
The post-join filter rows table marks which joined rows survive the filter.
filter after join
Summary
This is a finite filter-after-join caveat, not a full SQL dialect rulebook.