ChildAdded
I have seen Scripts where Users would use the "ChildAdded" instead of the PlayerAdded when a Player joins the Server, for Example:
game.Players.ChildAdded:connect(function(chl)
print(chl.Name.." Has joined the game"
end)
This also works for Models, Parts, etc When moved to Workspace(or any other Containers).
PlayerAdded
But In most Scripts users would Use the PlayerAdded Which on the other hand Picks-up the Player THAT Joined the Server, Here is an Example:
game.Players.PlayerAdded:connect(function(plr)
print(plr.Name.." Has Joined the game"
end)
Which is Better to use, and why?

8 comments
So, Both can be used?
Any of them can be used in a server script, but the "PlayerAdded" event is typically used. I'd use it wherever possible, because the "PlayerAdded" event detects players, while the "ChildAdded" event detects ANY objects.
Same case with whether to use "game.Players:GetPlayers()" or "game.Players:GetChildren()". They're almost the same, but ":GetPlayers()" creates a table of all of the players, while ":GetChildren()" creates a table of all of the objects in "game.Players".
Oh ok thanks! I'll stick with PlayerAdded.
If some script adds objects to the Players service (they shouldn't, but they can) that will fire ChildAdded. That WON'T fire PlayerAdded, so you can assume that PlayerAdded is always given a real player. For whatever reasons, PlayerAdded doesn't work in a LocalScript.
Then what do I use when I'm using a LocalScript?
"ChildAdded".
Thank you kind sir!