A file is an inode; the name is separate
The inode is the file. It holds the type, permissions, owner, size, timestamps, a link count, and the map from file offsets to disk blocks. What it does not hold is a name.
A directory is just a file whose contents map names to inode numbers. So a "name" is a directory entry, and several entries may point at the same inode. That is a hard link, and it is why the inode carries a link count rather than a name.
unlink() therefore does not delete a file. It removes one directory entry and decrements the link count. The inode and its blocks are freed only when the link count reaches zero and no process still holds the file open. This is the whole explanation for the classic operations puzzle: you delete a 40 GiB log, df reports no change, and the space returns the instant you restart the process holding it open.

