The only reasons why you would zero-fill a hard drive are:
In any of those cases, you should use a tool that can be explicitly told to write zeros to the hard drive (like
dd which is usually present in Linux distros). Windows is proprietary and its behavior may vary between various versions, including future ones. The
dd command that will zero-fill a drive goes like this:
dd if=/dev/zero of=/dev/sda bs=16M
sda is the first hard drive device under Linux,
sdc etc. being next ones. Be careful to use right hard drive here or better boot with only one drive to avoid zeroing another hard disk by accident.
Please note that in both of these cases you'll want to zero entire hard drive. Windows will only let you format partitions leaving some drive parts untouched, while
dd will set every single bit to zero.
In any other case you probably don't need to zero your hard drive. This includes cases when:
- You want to non-securely erase a partition (ie. data will still be recoverable, but not accessible in file explorer)
- You're reinstalling OS and want to start with an empty partition
- You want to repartition the disk
When cloning the hard drive you don't have to zero-fill the no one. There are two possible scenarios:
Manual cloning, ie. manually copying all files from one drive to another. There's no need to zero the new disk, you only have to make sure it's seen as empty or quick format it. This method will not work for boot/OS disks, because boot sectors and MBR won't be preserved. Note that copying a disk this way may improve or degrade performance, because it will cause spontaneous data defrag.
Cloning with a dedicated tool. You can use dedicated software to clone entire disk or selected partitions. This is the recommended method. You can go with free Clonezilla, but note that it won't let you to clone to a smaller drive. Free versions of Acronis True Image are often provided by hard drive manufacturers and it will handle smaller drives if your data fits on them.
None of those methods require zeroing. What was on the drive previously doesn't really matter, OS will treat it like void unless you will explicitly attempt to recover previous data. It doesn't matter if the drive is 1% or 99% full.
 SSD disks are an exception from this rule, as writing to them causes wearing. You should first check if your SSD's manufacturer doesn't provide dedicated secure erase tools. Some drives (ones that perform hardware-level encryption) can be told to forget encryption key, effectively making the drive's content a bunch of nonsensical bytes.