This took me a little while to get my head around the concepts.
But here is my understanding:
Thin In this particular format, the of the VMDK file on the datastore is equal to the amount that is used within the VM itself as it zeros out the space prior to I/O being written, so for example if you create a 200GB virtual disk, and you populate it with 100GB worth of data, the VMDK will be 100GB in size and will grow as more data is added to it.
Thick The VMDK file on the datastore is the size of the virtual disk file that you provisioned but no prezeroing takes place like it does in thin format. So for example if you create a 200GB virtual disk and write 100GB worth of data to it, the VMDK will still appear as 200GB in size but only contain 100GB worth of data.
Eagerzeroedthick The “truely” thick virtual disk, the size of the VMDK file within the datastore is equal to the virtual disk size that is provisioned. If you create a 200GB virtual disk, and write 100GB worth of data the VMDK will be 200GB and contain 100GB worth of data and 100GB of zero’s. Which format is the best? There are pro’s and cons for each. Thin format requires more monitoring and cant be used with RDM’s where Thick/Eagerzerothick are not as efficient as thin and one might not see as much space savings when implementing this type.