From the [documentation](http://www.kernel.org/doc/Documentation/devices.txt):

 /dev/tty		Current TTY device
 /dev/console	System console
 /dev/tty0		Current virtual console

In the good old days /dev/console was System Administrator console. And ttys were users serial devices attached to Server.
Now `/dev/console` and `/dev/tty0` represent current display and usualy are the same. You can ovverride it by adding, for example `console=ttyS0` to `grub.conf`. After that your `/dev/tty0` is a monitor and `/dev/console` is `/dev/ttyS0`.

Difference between /dev/tty an /dev/tty0 shows an exercise:

Switch to 2-nd console by pressing Ctrl+Alt+F2. Login as a root. Type the folowing: `sleep 5; echo tty0 > /dev/tty0`. press `Enter` and quick switch to 3d console by pressing `Alt+F3`.
Now switch back to 2-nd by pressing `Alt+F2`. Type `sleep 5; echo tty > /dev/tty`, press `Enter` and quick switch to 3d console.

You can see that tty is the console where process starts, and tty0 is a always current console.