If you want to do a join against a preloaded dataset in roxie then you have two choices:
A standard join - but all the rows will be cloned and returned before they are filtered.
A PROJECT that contains a filtered read of the dataset.
It would be clearer and possibly more efficient if there was an activity which shared the syntax of the JOIN, but allowed the input to be filtered before joining. (This would also be useful joining to SQL datasets, remote datasets or other architectures which can efficiently filter the source).
The implementation is likely to be similar to a prefect project - with a child query generated to create the matching rows. But will need to handle the normal join options, and have an option to allow mutliple child queries to be executed at the same time...