﻿---
title: ES|QL ST_DIFFERENCE function
description: 
url: https://www.elastic.co/elastic/docs-builder/docs/3562/reference/query-languages/esql/functions-operators/spatial-functions/st_difference
products:
  - Elasticsearch
---

# ES|QL ST_DIFFERENCE function
<applies-to>
  - Elastic Cloud Serverless: Preview
  - Elastic Stack: Planned
</applies-to>

Returns the part of `geomA` that does not intersect with `geomB`.

## Syntax

![Embedded](https://www.elastic.co/elastic/docs-builder/docs/3562/reference/query-languages/esql/images/generated/x-pack-esql/functions/st_difference.svg)


## Parameters

<definitions>
  <definition term="geomA">
    Expression of type `geo_point`, `geo_shape`, `cartesian_point` or `cartesian_shape`. If `null`, the function returns `null`.
  </definition>
  <definition term="geomB">
    Expression of type `geo_point`, `geo_shape`, `cartesian_point` or `cartesian_shape`. Must share the same coordinate reference system as the first parameter. If `null`, the function returns `null`.
  </definition>
</definitions>


## Description

Returns the part of `geomA` that does not intersect with `geomB`. This is equivalent to subtracting `geomB` from `geomA`. Both geometries must share the same coordinate reference system.

## Supported types


| geomA           | geomB           | result          |
|-----------------|-----------------|-----------------|
| cartesian_point | cartesian_point | cartesian_shape |
| cartesian_point | cartesian_shape | cartesian_shape |
| cartesian_shape | cartesian_point | cartesian_shape |
| cartesian_shape | cartesian_shape | cartesian_shape |
| geo_point       | geo_point       | geo_shape       |
| geo_point       | geo_shape       | geo_shape       |
| geo_shape       | geo_point       | geo_shape       |
| geo_shape       | geo_shape       | geo_shape       |


## Example

```esql
ROW a = TO_GEOSHAPE("POLYGON ((0 0, 3 0, 3 3, 0 3, 0 0))"),
    b = TO_GEOSHAPE("POLYGON ((1 1, 4 1, 4 4, 1 4, 1 1))")
| EVAL diff = ST_DIFFERENCE(a, b)
| KEEP diff
```


| diff:geo_shape                                                            |
|---------------------------------------------------------------------------|
| POLYGON ((3.0 1.0, 3.0 0.0, 0.0 0.0, 0.0 3.0, 1.0 3.0, 1.0 1.0, 3.0 1.0)) |


### Diagrams

**Difference of two overlapping polygons**
The difference is the part of the first polygon that does not overlap with the second.
![Difference of two overlapping polygons](https://www.elastic.co/elastic/docs-builder/docs/3562/reference/query-languages/esql/images/generated/x-pack-esql/functions/st_difference_difference.svg)