Outer joins have to be either right or left. The outer keyword is just noise, so it can be dropped, but you must use the left or right keyword. The left/right keyword is used to indicate which of the two joined tables is preserved. In the above outer join the "types" table is preserved, because the "types" table is on the right side of the join statement.
You could also rewrite the query to have the types table first, in which case you would use a left outer join.
"attr right outer join types" is equivalent to "types left outer join attr".