The issue was solved- as it turns out, the data range A3:A includes not only the filled cells but also all of the blank cells in the rest of A, to the end of the document.
The above query was run in a cell past row 3, so it was impossible to display the full result, because the empty cells were being sorted above the filled ones. Event if the document automatically expanded to fit the output, the expanded rows would now also need to be added, and so on to infinity.
Interestingly, the reason descending order worked was that empty cells are ignored when they are sorted at the end of a data table. Sheets does not care if it cannot fit them, because they are empty.
The real solution around this, if anyone needs to run the above query at a row lower than the data, is to reduce the input data to a finite range (e.g. A3:A99 instead of A3:A), or add code to eliminate unwanted empty cells.