Cannot export SELECT result as expected
Can you try PL/SQL? With FOR loops, Oracle performs implicit bulk collects of 100 rows at a time, as per this link.

Make sure you are doing the order by in your select, as you said this gave you the correct results.  I also recommend you to clean your duplicates.

SET SERVEROUTPUT ON
declare 
  cursor c1 is
    select &lt;YOUR SELECT&gt;
begin   
  for c in c1 loop 
    null;
  end loop;  
end;
/