I'm not sure, let's think about it:

Exception
=======

* :+1: we keep a strong consistency on the `ResultSet`
* :-1: `empty($resultset[3]);` throw an Exception (empty() call offsetGet)

Null
===

* :+1: no Exception on invalid range
* :-1: get some non-`Result` from a ResultSet, we break consistency
* :+1: compliant with other [known implementation](http://www.doctrine-project.org/api/common/2.3/source-class-Doctrine.Common.Collections.ArrayCollection.html#247-259) 

Whatever our choice is, I think `offsetSet` could also forbid pushing new Result to the ResultSet if we want to force strong consistency (like with the Exception on get).

I'm ok with both solutions:
* keeping it that way (you can break the ResultSet)
* add locks and Exceptions to prevent bad things / unknown offsets