It is very important for us to understand the difference between SELECT SINGLE and SELECT UP TO 1 ROWS...
We use select single when we need to get one record form data base table with where condition, we should pass key field in where condition.
SELECT SINGLE * FROM MARA
INTO WA_MARA WHERE MATNR = '00001'. "here matnr is key field
We use SELECT UP TO 1 ROWS to get a single record from data base table where there is no key field at our side.
SELECT * FROM MARA INTO WA_MARA
UP TO 1 ROWS
WHERE MTART = 'FERT'. "here mtart is not a key field
In simple SELECT SINGLE is used to get exact record from data base where as SELECT UP TO 1 ROWS is use to get approximate record from data base.