<p>Why do I need two of them? When I have to use one or another?</p>

Please see:
http://www.sap-img.com/oracle-database/finding-oracle-sid-of-a-database.htm
What is the difference between Oracle
  SIDs and Oracle SERVICE NAMES. One
  config tool looks for SERVICE NAME and
  then the next looks for SIDs! What's
  going on?!
Oracle SID is the unique name that
  uniquely identifies your
  instance/database where as Service
  name is the TNS alias that you give
  when you remotely connect to your
  database and this Service name is
  recorded in Tnsnames.ora file on your
  clients and it can be the same as SID
  and you can also give it any other
  name you want.
SERVICE_NAME is the new feature from
  oracle 8i onwards in which database
  can register itself with listener. If
  database is registered with listener
  in this way then you can use
  SERVICE_NAME parameter in tnsnames.ora
  otherwise - use SID in tnsnames.ora.
Also if you have OPS (RAC) you will
  have different SERVICE_NAME for each
  instance.
SERVICE_NAMES specifies one or more
  names for the database service to
  which this instance connects. You can
  specify multiple services names in
  order to distinguish among different
  uses of the same database. For
  example:
SERVICE_NAMES = sales.acme.com,
  widgetsales.acme.com
You can also use service names to
  identify a single service that is
  available from two different databases
  through the use of replication.
In an Oracle Parallel Server
  environment, you must set this
  parameter for every instance.
In short: SID = the unique name of your DB instance, ServiceName = the alias used when connecting