I think that's because he mentions that the URL spec doesn't cover query strings - here's the section -
Query strings
The question mark ("?", ASCII 3F hex) is used to delimit the boundary between the URI of a queryable object, and a set of words used to express a query on that object. When this form is used, the combined URI stands for the object which results from the query being applied to the original object.
Within the query string, the plus sign is reserved as shorthand notation for a space. Therefore, real plus signs must be encoded. This method was used to make query URIs easier to pass in systems which did not allow spaces.
The query string represents some operation applied to the object, but this specification gives no common syntax or semantics for it. In practice the syntax and sematics may depend on the scheme and may even on the base URI.
So the "?" has to be there to mark the start of the query
string, if it's left out, it's part of the path (which the URL spec does cover) - but the query string itself isn't defined in this document. (It actually is in the httpaddress grammar as "search" and is defined as alphanumerics and '+' - but I think this is just to emphasize that
you should use + instead of spaces in the URL...)
So *query strings* can contain some reserved characters that other parts of the URL cannot - equals are used to separate name/value pairs; I've seen ':' used when a value is an http address; etc. - but they have to start with a '?'.