# Unexpected behaviour with GraphIntersection and GraphDifference

I run into some unexpected behaviour of GraphIntersection and GraphDifference. Behaviour is the same for both so the example is only on the GraphIntersection:

Suppose I have two lists of directed edges, forming a cycle:

cycle1 = {a \[DirectedEdge] b, b \[DirectedEdge] c, c \[DirectedEdge] d, d \[DirectedEdge] e, e \[DirectedEdge] f, f \[DirectedEdge] g, g \[DirectedEdge] h, h \[DirectedEdge] a};

cycle2 = {g \[DirectedEdge] c, c \[DirectedEdge] d, d \[DirectedEdge] e, e \[DirectedEdge] f, f \[DirectedEdge] g};


I construct two graphs and I want to select the Intersection between them. This seems to work only for the edges and not for the vertices!

GraphIntersection[Graph[cycle1], Graph[cycle2]] // EdgeList
GraphIntersection[Graph[cycle1], Graph[cycle2]] // VertexList


(* Out:

{c \[DirectedEdge] d, d \[DirectedEdge] e, e \[DirectedEdge] f, f \[DirectedEdge] g}

{a, b, c, d, e, f, g, h}


*)

I would have expected bahaviour identical to the approach of first intersecting the edges and then constructing a graph:

Graph[Intersection[cycle1, cycle2]] // EdgeList

Graph[Intersection[cycle1, cycle2]] // VertexList

(* Out:
{c \[DirectedEdge] d, d \[DirectedEdge] e, e \[DirectedEdge] f, f \[DirectedEdge] g}

{c, d, e, f, g}
*)


Please note the vertices are correct in the last example, the first example, all vertices are listed.

Could anyone explain the reason behind this?

In both cases, the vertex set of the graph produced by the two functions is the Union of the vertex sets of the input graphs.