Update: My answer (who am i) is correct, your terminal is either broken or not configured correctly to support the functionality.
Based on the comments, I've done some more research and I asked a friend to help. You don't say which terminal you are using but it's likely doing the same thing as gnome-terminal.
In respect of gnome-terminal* when the terminal is started, it does not update the utmp file. This appears to be a design decision. Later when who reads utmp to find out the relevant information it's not there so it just exits and prints nothing.
* I tries xterm, konsole and ssh to various distros.
who am i which prints the invoking user as opposed to
whoami which tells you the username of the current effective user
If given two non-option arguments, 'who' prints only the entry for
the user running it (determined from its standard input), preceded by
the hostname. Traditionally, the two arguments given are 'am i', as in
'who am i'.
That is buried in
info coreutils 'who invocation' So interestingly (on a linux coreutils based system)
who xyzzy plugh works as well.