In un programma asp non so quale strano motivo questa query si comporta in modo strano

query:
codice:
query2="SELECT * FROM (SELECT TOP "&q&" * FROM (SELECT TOP "&quanti&" * FROM sms ORDER BY data DESC) ORDER BY data ASC) ORDER BY data DESC"
stampa query:
pag 1
codice:
SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 10 * FROM sms ORDER BY data DESC) ORDER BY data ASC) ORDER BY data DESC
mostra 12 risultati

pag 2
codice:
SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 20 * FROM sms ORDER BY data DESC) ORDER BY data ASC) ORDER BY data DESC
mostra 20 risultati

mentre le altre pagine (4)
codice:
SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 30 * FROM sms ORDER BY data DESC) ORDER BY data ASC) ORDER BY data DESC

SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 40 * FROM sms ORDER BY data DESC) ORDER BY data ASC) ORDER BY data DESC

SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 50 * FROM sms ORDER BY data DESC) ORDER BY data ASC) ORDER BY data DESC

SELECT * FROM (SELECT TOP 7 * FROM (SELECT TOP 60 * FROM sms ORDER BY data DESC) ORDER BY data ASC) ORDER BY data DESC
mostrano correttamente 10 risultati (l'ultima 7)

per quale dannato motivo le prime due fanno quello che vogliono?