Depends upon the system. In my system, it does write to stderr:
$ which abcdasdf 1>/dev/null
which: no abcdasdf in (/usr/lib/mpi/gcc/openmpi/bin:/usr/local/bin:/usr/bin:/bin:.....snip)
$ uname -srv
Linux 3.4.47-2.38-desktop #1 SMP PREEMPT Fri May 31 20:17:40 UTC 2013 (3961086)
I'm intrigued by your uname command. What kind of information adds to this case? Honest question, I would have expected the following command to provide context:
$ which --version | head -1
GNU which v2.20, Copyright (C) 1999 - 2008 Carlo Wood.
Or may be the output of lsb_release, although it may not be installed in your system.
Is "which" behaviour dependant on the kernel version?
EDIT: formatting; also to add that which writes to stderr if the command you're asking for can't be found in the path.