It's fully backwards compatible. Exactly the same results are returned;
the functionality is identical.
Further, on most database servers we support, the subselect approach
will be faster, since network roundtrips, C to Python conversions and
some data marhsalling operations are all avoided. It also gives the
database server as more opportunities to perform optimisations. You
mentioned you were using MySQL as the backend, which, sadly, has some
performance issues with (some) subselects and you will have to check the
various things you're doing there, hence the documentation note. It's
not correct to always avoid subselects with MySQL (which is why we
don't), but has to be examined case-by-case if the query is
time-critical. Hopefully that will work improve in the future, as the
MySQL developers enable the server and storage engine optimisation paths
to interact a bit more. Some of that work is happening already as part
of the Drizzle project.
> Reading the part "Performance considerations" got me in the right
> direction but didn't help me very well, because if you do it like
> that, it will still do a subselect.
That's a documentation bug. There should be a list() call wrapped around
the rhs of the first line in the fragment in "Performance
considerations". If you open a ticket for that, we'll fix it.
Regards,
Malcolm