It is rule based optimizations and Joins are from LEFT to RIGHT
SELECT *
FROM todo d3 UNNEST d3.t_items AS d3u
JOIN todo d1 ON KEYS d3u.itemId
WHERE …;
SELECT *
FROM todo d3
JOIN todo d1 ON KEYS ( ARRAY v.itemId FOR v IN d3.t_items END)
WHERE …;
In Q2 you are not processing array element you can use this also
SELECT *
FROM todo d3
JOIN todo d1 ON KEYS d3.t_items[*].itemId
WHERE …;
Depends on your projection representation you use right query.