Was sollen denn die ganzen Spekulationen?
Probiert's doch aus!

Mit Limit und Offset wird das Ergebnis begrenzt (beim Open wird natürlich das ganze SQL ausgeführt, wie sollte sonst bekannt sein wieviele Datensätze vorhanden sind - beim Limit und Offset ggf. nur bis zum Ende angeforderten Daten). Die Datensätze sind natürlich immer aktuell, da beim OPEN alles aktualisiert wird.
Allerdings geschieht das in Form von allen möglichen zwischen gespeicherten Pointern und temporären Objekten etc.
Die Materialisierung, also die Ausgabe der tatsächlichen (abgerufenen Daten) erfolgt so spät wie möglich, also erst kurz vor der Ausgabe. Das bedeutet, dass (im Gegensatz zu einem Scroll Cursor) eben nicht die ganzen Datensätze gelesen und geladen werden. Deshalb können mit Limit und Offset die Abfragen tatsächlich (beschleunigt bzw. optimiert werden).

Hier ein kleines Beispiel zum Ausprobieren (im Übrigen mit Statischem SQL, aber Multiple-Row Fetch).
Code:
//------------------------------------------------------------------------------
DCL-DS RefDSSales Qualified Template;                                           
  SalesDate  Date;                                                              
  CustNo     VarChar(15);                                                       
  Name       VarChar(35);                                                       
  Amount     Packed(11: 2);                                                     
End-DS;   
//------------------------------------------------------------------------------
DCL-C GblMaxRows       Const(100);                                              
                                                                                
DCL-S Index1      Uns(3);                                                       
DCL-S Index2      Uns(3);                                                       
DCL-S Text        Char(50);                                                     
DCL-S NbrRows     Int(5);                                                       
DCL-S StartDate   Date(*ISO)   Inz(D'2000-01-01');                              
                                                                                
DCL-DS DSSales    LikeDS(RefDSSales) Dim(GblMaxRows);                           
                                                                                
DCL-DS PGMSDS     PSDS Qualified;                                               
  MsgText         Char(80) Pos(91);                                             
  MsgTextK        Char(50) Pos(91);                                             
End-Ds;                                                                         
//------------------------------------------------------------------------------
Exec SQL Set Option Commit=*NONE, DatFmt=*ISO;                                  
                                                                                
*INLR = *On;                                                                    
Monitor;                                                                        
                                                                                
  For Index1 = 1 to 6;                                                          
      Select;                                                                   
      When Index1   = 1;                                                        
           NbrRows  = ListSales(DSSales: '10001': StartDate: 10);               
      When Index1   = 2;                                                        
           NbrRows  = ListSales(DSSales: '10001': StartDate: 10: *On);          
      When Index1   = 3;                                                        
           NbrRows  = ListSales(DSSales: '10001': StartDate:  3: *OFF: 9);      
      When Index1  >= 4 and Index1 <= 6;                                        
           NbrRows  = ListSales(DSSales: '10001': StartDate: 3: *On);           
      EndSl;                                                                    
                                                                                
      If NbrRows > *Zeros;                                                      
         Dsply ('Index: '+ %Char(Index1) +' '+ %Char(NbrRows) +' Rows');        
         For Index2 = 1 to NbrRows;                                             
             Text = 'Date: '    + %Char(DSSales(Index2).SalesDate) +            
                    ' CustNo: ' + %Trim(DSSales(Index2).CustNo) +               
                    ' Amount: ' + %Char(DSSales(Index2).Amount);                
             Dsply Text;                                                        
         EndFor;                                                                
      Else;                                                                     
         Dsply 'Not Found';                                                     
      EndIf;                                                                    
  EndFor;                                                                       
                                                                                
On-Error;                                                                       
  Dsply PGMSDS.MsgTextK;                                                        
EndMon;                                                                         
                                                                                
Return;                                                                         
//******************************************************************************
DCL-Proc ListSales;                                                             
                                                                                
  DCL-PI *N        Int(5);                                                      
     POutSales     LikeDS(RefDSSales) Dim(GblMaxRows);                          
     ParCustNo     VarChar(15)        Const  Options(*Trim);                    
     ParSalesDate  Date(*ISO)         Const;                                    
     ParNbrRows    Int(5)             Const  Options(*NoPass);                  
     ParNext       Ind                Const  Options(*NoPass);                  
     PInStart      Int(5)             Const  Options(*NoPass);                  
  End-Pi;                                                                       
                                                                                
  DCL-S RtnNbrRows  Int(5);                                                     
                                                                                
  DCL-S LocNbrRows  Int(5)            Inz(GblMaxRows);                          
  DCL-S LocMaxRows  Int(5);                                                     
  DCL-S LocNextNbr  Int(5)            Static;                                   
  //----------------------------------------------------------------------------
  If      %Parms >= %ParmNum(ParNext) and ParNext = *On;                        
  ElseIf  %Parms >= %ParmNum(PInStart) and PInStart > 0;                        
     LocNextNbr = PInStart;                                                     
  Else;                                                                         
     Clear LocNextNbr;                                                          
  EndIf;                                                                        
                                                                                
  If     %Parms >= %ParmNum(ParNbrRows)                                         
     and ParNbrRows >= *Zeros and ParNbrRows <= GblMaxRows;                     
     LocNbrRows = ParNbrRows;                                                   
  EndIf;                                                                        
                                                                                
  Exec SQL                                                                      
       Declare CsrC01 Cursor For                                                
          Select SalesDate, s.CustNo, CustName1, Amount                         
             from SalesX s join AddressX a on s.CustNo = a.CustNo               
                  Where     s.CustNo  = :ParCustNo                              
                        and SalesDate > :ParSalesDate                           
             Order By SalesDate, CustNo                                         
             Limit :LocNbrRows   Offset :LocNextNbr                             
             For Fetch Only;                                                    
                                                                                
  Exec SQL  Close CsrC01;                                                       
  Exec SQL  Open  CsrC01;                                                       
                                                                                
  LocMaxRows = GblMaxRows;                                                      
  Exec SQL  Fetch Next From CsrC01 For :LocMaxRows Rows                         
                                   into :POutSales;                             
  RtnNbrRows = SQLER3;                                                          
  LocNextNbr += SQLER3;                                                         
                                                                                
  Exec SQL  Close CsrC01;                                                       
                                                                                
  Return RtnNbrRows;                                                            
                                                                                
End-Proc ListSales;