From your description, you are using an IDENTITY column - that is the expected behaviour, and it is actually what you want to happen. The problem is that you are assuming that ir represents a row numbering system, when it represents a unique ID value for each row instead.
The database doesn't "recycle" IDENTITY values, because it doesn't "know" what you are using them for - so it assumes that you are referring to those values from other places and other data. If it recycled them, then the old data would effectively become attached to the new rows, and that could be very bad indeed. Imagine an invoicing system where purchases for a different, deleted, customer became attached to your new customer and your were charged for them!
While it is possible to reset an identity field:
DBCC CHECKIDENT('mYTable', RESEED, 1)
It's a bad idea, generally.
So don't use it as a row number: instead, use ROW_NUMBER:
SELECT ROW_NUMBER() OVER (ORDER BY ID ASC) AS RowNumber, ID, QuestionText FROM MyTable