Два запроса возвращают разные строки.
Ни один запрос не является детерминированным. Поэтому ни один запрос не должен использоваться в реальной системе.
Первый запрос, по крайней мере, является попыткой создать окно строк (строк между x и y). Однако, поскольку ORDER BY не существует, порядок строк не является детерминированным, и окно, вероятно, не выполняет то, что вы хотите.
Второй запрос возвращает произвольные x строк данных (при условии x> y). В противном случае он возвращает 0 строк (если y> = x). Если вы пытаетесь создать какой-то оконный запрос, это не так.
Если вы хотите, чтобы оконный запрос работал, вы бы хотели что-то вроде
SELECT *
FROM (SELECT a.*,
row_number() over (order by something) rnum
FROM table_name)
WHERE rnum BETWEEN x AND y
Если вы хотите использовать ROWNUM, вам нужно что-то вроде
SELECT *
FROM (SELECT a.*,
rownum rnum
FROM( SELECT b.*
FROM table_name
ORDER BY something) a)
WHERE rownum < y
AND rnum > x
Но это, как правило, менее эффективно, чем метод аналитических запросов.