Interface buộc mọi kiểu cài đặt nó phải có chung một tập field, nên truy vấn được các field đó mà không cần biết kiểu cụ thể. Union gom các kiểu không có gì chung, nên phải dùng fragment theo từng kiểu.
interface Node { id: ID! } # shared fields — queryable directly
union SearchResult = Post | User # nothing in common — needs inline fragments
query { search(term: "a") { ... on Post { title } ... on User { name } } }Chọn theo ngữ nghĩa: dùng interface khi các kiểu thật sự chia sẻ thuộc tính, ví dụ mọi nội dung đều có id và thời điểm tạo. Dùng union khi kết quả có thể là những thứ khác hẳn nhau, ví dụ tìm kiếm trả về người dùng, bài viết hoặc sản phẩm.
Một ứng dụng đáng chú ý của union là mô hình hoá kết quả mutation: trả về hoặc record thành công, hoặc một trong các kiểu lỗi nghiệp vụ. Client buộc phải viết fragment cho từng kiểu nên không bỏ sót trường hợp lỗi.
Chi tiết kỹ thuật: server phải có cách xác định kiểu cụ thể cho mỗi giá trị trả về — thiếu bước này là lỗi lúc chạy thường gặp khi mới dùng abstract type.