While you could use a searched CASE expression, NVL would be easier, as davey23uk already mentioned.

Code:
SELECT p.publication_name, p.publication_id,
       o.dept,o.link                  AS author_link,
       NVL(o.lname, a.a_lname)        AS lastname,
       NVL(o.mname, a.a_mname) || '.' AS middlename,
       NVL(o.fname, a.a_fname)        AS firstname,
       a.publicationa_id
   FROM publications p 
  INNER JOIN publications_authors a 
     ON p.publication_id = a.publication_id
   LEFT JOIN people o 
     ON a.id             = o.id
  ORDER BY publicationa_id asc;