Something worth noting from the manual page for `halt`, `poweroff` and `reboot` is:

> These are legacy commands available for compatibility only.

At the bottom is a "see also" for `systemctl`, and `man systemctl` has further details regarding the difference between the three things (in context, `systemctl halt`, `systemctl reboot`, etc).  As Milliways points out in a comment below, the three legacy commands are actually symbolic links to `systemctl`.<sup>1</sup>

My own preference is `halt` since it's the shortest to type; on machines that can be powered off I use `halt -p`.  However, this does not apply to the pi.

> `init 0`

This is an anachronism that, again, will work for backward compatibility.  However, if you are new to linux you should avoid it since [the init system][1], `systemd`, does not use SysV runlevels (so don't bother thinking in those terms).

> I could just unplug the power and let it crash

Please see "https://raspberrypi.stackexchange.com/q/50345/5538".

_______________

<sup>1. They are still treated differently because the executable can check what name it was invoked with.</sup>


  [1]: https://en.wikipedia.org/wiki/Systemd