They would be duplicated anyway; your SET_BLOCK_PROPERTY has nothing to do with it.
How to fix it? You'll have to change data source. Now it is ... what? A table? If so, you could try to create a view as SELECT DISTINCT FROM YOUR_TABLE and base form's data block on that view. If you'd like to perform updates and inserts, consider use of the INSTEAD OF trigger. Also, you'll probably have to code form's ON-INSERT, ON-UPDATE and ON-DELETE triggers.
Or, create a (stored) procedure and base a form data block on the procedure. The procedure should return a PL/SQL (index-by) table. In that case, you could even pass "item1" and "item2" values to the procedure so that it'll return desired records. Of course, you'd still have to use DISTINCT in the procedure's SELECT statement.
Or, base the block on the FROM clause. You can use SELECT DISTINCT in there as well.