Se a finalidade é apenas determinar a existência um registro na tabela, com certeza o exists tem desempenho melhor.
Internamente, a consulta da cláusula exists será realizada, mas os dados não chegarão a ser recuperados, o comando irá retornar true assim que a primeira linha que satisfaça a condição for encontrada, ou false caso não exista tal registro.
Já no caso do count, além de realizar a consulta, o banco irá recuperar TODOS os registros que satisfaçam esta condição (a diferença de performance fica bem clara quando esta query retorna muitos registros, especialmente caso não exista um índice que possa ser utilizado com as condições definidas na consulta) contar a quantidade de registros, que será então retornada para a query de nível superior.
A situação é quase a mesma.
Caso não exista mesmo um registro, ambos os comandos devem se comportar da mesma forma.
No entanto, caso a subquery venha a retornar vários registros, o not exists e o count = 0 irão se comportar da mesma forma (o not exists irá retornar false já no primiero registro encontrado, enquanto o count irá contar todos os registros retornados, para depois comparar o resultado com o valor 0).