Is COUNT(DISTINCT PRIMARY_KEY) faster than COUNT(*)? I haven't got a particular problem here, I'm just interested. One of my associates uses COUNT(DISTINCT(PRIMARY_KEY)) every time he needs to select all the data from a table (with 100m + rows) is it any quicker to do it this way rather than just count(*)? If it's the primary key surely the database knows that it's just pulling a count for the whole database and why?
The answer from Balazs Papp is no longer true with Oracle 12.2 (and probably later). The optimizer correctly detects that the distinct on a unique column will not change the result and uses the same execution plan for both queries:

SQL_ID  dvkqkk6fxj5hc, child number 0
-------------------------------------
select count(*) from t1

Plan hash value: 3763744789

-------------------------------------------------------------------------------------------------------------
| Id  | Operation             | Name         | Starts | E-Rows | Cost (%CPU)| A-Rows |   A-Time   | Buffers |
-------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |              |      1 |        |  1112 (100)|      1 |00:00:00.24 |    4178 |
|   1 |  SORT AGGREGATE       |              |      1 |      1 |            |      1 |00:00:00.24 |    4178 |
|   2 |   INDEX FAST FULL SCAN| SYS_C0021608 |      1 |   2097K|  1112   (1)|   2097K|00:00:00.16 |    4178 |
-------------------------------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1
   2 - SEL$1 / T1@SEL$1


And the plan for count(distinct):

SQL_ID  147hfq5n6qvfw, child number 0
-------------------------------------
select count(distinct id) from t1

Plan hash value: 3763744789

-------------------------------------------------------------------------------------------------------------
| Id  | Operation             | Name         | Starts | E-Rows | Cost (%CPU)| A-Rows |   A-Time   | Buffers |
-------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |              |      1 |        |  1112 (100)|      1 |00:00:00.24 |    4111 |
|   1 |  SORT AGGREGATE       |              |      1 |      1 |            |      1 |00:00:00.24 |    4111 |
|   2 |   INDEX FAST FULL SCAN| SYS_C0021608 |      1 |   2097K|  1112   (1)|   2097K|00:00:00.16 |    4111 |
-------------------------------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$BEC84FC4
   2 - SEL$BEC84FC4 / T1@SEL$1


The index SYS_C0021608 is the primary key index on the table. If the column is defined as NOT NULL and has a unique index, the same happens.

The Oracle version: 

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production