Você pode usar uma variável para verificar se o último id é igual ao id atual e, nesse caso, produzir null ou ''.
select
case when c.ClientId <> @clientid then c.Name else '' end as ClientName,
case when c.ClientId <> @clientid then @ClientId := c.ClientId else '' end as ClientId,
p.ContactId,
p.Name as ContactName
from
Clients c
inner join Contacts p on p.ClientId = c.Clientid
, (select @clientid := -1) x
order by
c.ClientId, p.ContactId
Exemplo:http://sqlfiddle.com/#!2/658e4c/6
Observe que isso é um pouco hacky. Eu deliberadamente fiz ClientId o segundo campo, para que eu pudesse alterar e retornar a variável clientId no mesmo campo. Em outros casos mais elaborados, talvez seja necessário fazer isso em um campo separado. Mas para eliminar esse campo de espaço reservado do resultado, você terá que incorporar a consulta inteira em uma subseleção e definir os campos desejados na ordem correta na consulta de nível superior.