In short: SID = the unique name of your DB, ServiceName = the alias used when connecting.
SERVICE_NAMES specifies one or more names by which clients can connect to the instance. The instance registers its service names with the listener. When a client requests a service, the listener determines which instances offer the requested service and routes the client to the appropriate instance.
SID, DB Name, DB Domain, Global Database Name, Service Name, Service Alias and Instance Name in Oracle ?
SID = identifies the database instance (database name + instance number). So if your database name is somedb and your instance number is 3, then your SID is somedb3.
DB Name = Name of the database (database can be shared b/t multiple instances)
DB Domain = Usually the same as your company domain (somecompany.com)
Global Database Name = Database name + database domain (somedb.somecompany.com)
Service Name = A "connector" to one or more instances. It is often useful to create additional service names in a RAC environment since the service can be modified to use particular SIDs as primary or secondary connections, or to not use certain SIDs at all.
Service Alias = An alias to the service name (just like a CNAME, etc). Say you make your service name something meaningful to the dba, but perhaps it's a bit esoteric. Create a service alias and name it something that will be meaningful to the user.
Instance name = same as SID