Duplicate will duplicate the code of the query and reference will only reference the result of the query.
You use duplicate if you want to create a similar query but with some changes - so you don't have to perform all the steps by hand.
Reference will normally be used in pairs or multiples: When you reached a stage/result that shall be further processed in different ways: So the different reference queries will all "share" their first steps.