You don't call any of that in Thread.Execute. If you want that thread frees itself when it exits, then you use FreeOnTerminate := True; BUT it means that you cannot use thread.WaitFor; from anywhere for that thread.
As it came apparent, FreeAndNil contains all these; Terminate, WaitFor and Destroy. But the above note applies here too, you cannot use FreeAndNil(thread) if FreeOnTerminate := True;.
Basically FreeOnTerminate is for thread to be standalone. It will not allow any outside control telling it to free itself. You can call thread.Terminate from outside though, but you can't wait for it to close, or know when it did, except with using global variables.